HTTP的定义
超文本传输协议(HTTP) 是 用于传输超媒体文档(如HTML)的 应用层协议。它专为Web浏览器和Web服务器之间的通信而设计,但也可用于其他目的。HTTP遵循传统的 客户端 - 服务器模型,客户端打开连接以发出请求,然后等待它收到响应。HTTP是 无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。虽然通常基于TCP / IP层,但它可以在任何可靠的 传输层上使用 ; 也就是说,一种不会无声地丢失消息的协议
MIME 类型是一种标准化的方式来指示文件的性质和格式
语法构成:
type / subtype 类型 / 子类型
Type 类型 | 描述 | 实例 |
text | 表示文本解析,一般用来给浏览器引擎解析运行 | text/plain ,text/html ,text/css ,text/javascript |
image | 代表任何类型的图像 | image/gif ,image/png ,image/jpeg ,image/bmp,image/webp ,image/x-icon ,image/vnd.microsoft.icon |
audio | 表示任何类型的音频文件 | audio/midi , audio/mpeg, audio/webm, audio/ogg, audio/wav |
video | 表示任何类型的视频文件 | video/webm , video/ogg |
application | 表示任何类型的二进制数据。表示文件类型 | application/javascript ,application/octet-stream ,application/pkcs12 ,application/vnd.mspowerpoint ,application/xhtml+xml ,application/xml ,application/pdf |
其他类型
类型 | 描述 |
multipart/form-data | 用于上传文件与表单数据 |
application/x-www-from-urlencoded | 会将表单内的数据转换为键值对,比如,name=java&age = 23 ajax POST 默认提交方式 |
http1.x 与 http2.x 的主要区别
- 它是一种多路复用协议。可以通过同一连接处理并行请求,删除HTTP / 1.x协议的顺序和阻塞约束
- HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快,支持数据压缩
CORS
跨源资源共享(CORS)是一种机制,跨域CORS 请求时如post,put 等都会产生预检
什么“预检”意味着:在浏览器尝试POST
问题中的代码之前,它将首先向OPTIONS
服务器发送请求 - 以确定服务器是否选择接收POST
包含Authorization
和Content-Type: application/json
标题的跨源
允许哪些源有可访问该资源权限:
Access-Control-Allow-Origin: <origin> | *
Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header
表示预检请求多久被缓存
Access-Control-Max-Age: <delta-seconds>
表示访问资源时允许的一种或多种方法
Access-Control-Allow-Methods: <method>[, <method>]*
Access-Control-Allow-Methods: ['GET', 'POST', 'DELETE']
HTTP的缓存
缓存是一种存储给定资源副本并在请求时提供服务的技术。当Web缓存在其存储中具有请求的资源时,它会拦截该请求并返回其副本,而不是从原始服务器重新下载。这实现了几个目标:它减轻了不需要为所有客户端本身提供服务的服务器的负载,并且通过更靠近客户端来提高性能,即,传输资源所需的时间更少。对于网站而言,它是实现高性能的主要组成部分。另一方面,它必须正确配置,因为并非所有资源都永远保持相同:重要的是仅在资源更改之前缓存资源,而不是更长时间
缓存规则
Cache request directives
请求的指令
只有存在304状态的时候请求会带上此标头
If-Modified-Since:请求的HTTP标头发出请求的条件,请求修改的日期。对应response的
Last-Modified
If-None-Match:请求的HTTP标头发出请求的条件,请求修改的日期。对应response的
ETag
相匹配记标识读取本地资源
缓存请求指令
Cache-Control: max-age=<seconds> Cache-Control: max-stale[=<seconds>] Cache-Control: min-fresh=<seconds> Cache-Control: no-cache Cache-Control: no-store Cache-Control: no-transform Cache-Control: only-if-cached //表示不检索新数据。在这种情况下,服务器希望客户端只获得一次响应然后缓存。从此刻起,客户端应继续发布缓存副本,并避免联系源服务器以查看是否存在较新的副本。
Cache response directives
响应返回的指令
ETag:
HTTP响应报头为资源的特定版本的标识符
Last-Modified:
响应HTTP报头包含在其原始服务器认为该资源的最后修改日期和时间
缓存响应指令
Cache-Control: must-revalidate Cache-Control: no-cache //缓存对比 Cache-Control: no-store // 强制不缓存每次都是重新读取 Cache-Control: no-transform Cache-Control: public //表示任何缓存都可以缓存响应。 Cache-Control: private //表示响应仅供单个用户使用,不得由共享缓存存储。私有缓存可以存储响应 Cache-Control: proxy-revalidate Cache-Control: max-age=<seconds> //缓存的最长时间 Cache-Control: s-maxage=<seconds>
http 请求状态:
//对比缓存
status code : 304 Not Modified
//在有效的时间内读取本地磁盘,以存在就直接读取本地
status code : 200 from disk cache
匹配:发起
主要查看缓存规则:
在请求的headers 头里面:
客户端发送Cache-Control 告知是否需要缓存
Cache-Control: no-store