文章目录
- 参考HTTP
- 通用标头
- Cache-Control
- Connection
- Date
- Pragma
- Trailer
- Transfer-Encoding
- Upgrade
- Via
- Warning
- 请求头
- Accept
- Accept-Ranges
- Accept-Encoding
- Accept-Language
- Accept-Charset
- Expect
- From
- If-Match
- If-None-Match
- If-Modified-Since
- If-Range
- If-Unmodified-Since
- Proxy-Authorization
- Range
- TE
- Host
- Referer
- Origin
- User-Agent
- Authorization
- Cookie
- 响应标头
- Accept-Ranges
- Age
- Expires
- ETag
- location
- Proxy-Authenticate
- WWW-Authenticate
- Retry-After
- Server
- Vary
- Access-Control-Allow-Origin
- 实体标头
- Allow
- MIME type
- Content-Dispostion
- content-type
- Content-Encoding
- Content-Language
- Content-Length
- Content-Range
- Content-Location
- Content-MD5
- Last-Modified
参考HTTP
标头的具体使用 [HTTP](具体参考HTTP有详细介绍
通用标头
请求和响应
Cache-Control
指令格式具有以下有效规则:
- 不区分大小写,但建议使用小写。
- 多个指令以逗号分隔。
- 具有可选参数,可以用令牌或者带引号的字符串语法。
缓存请求指令
客户端可以在HTTP请求中使用的标准 Cache-Control 指令。
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-Control 指令。
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>
扩展Cache-Control指令
拓展缓存指令不是核心HTTP缓存标准文档的一部分,使用前请注意检查兼容性!
Cache-control: immutable
Cache-control: stale-while-revalidate=<seconds>
Cache-control: stale-if-error=<seconds>
Cache-Control:no-cache
Cache-Control:max-age=60
可缓存性
-
public
表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存,即使是通常不可缓存的内容
(例如:1.该响应没有max-age
指令或Expires
消息头;2. 该响应对应的请求方法是 POST )
-
private
表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器。
-
no-cache
在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证(协商缓存验证)
-
no-store
缓存不应存储有关客户端请求或服务器响应的任何内容,即不使用任何缓存
到期
-
max-age=<seconds>
设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与Expires
相反,时间是相对于请求的时间。
-
s-maxage=<seconds>
覆盖max-age
或者Expires
头,但是仅适用于共享缓存(比如各个代理),私有缓存会忽略它。
-
max-stale[=<seconds>]
表明客户端愿意接收一个已经过期的资源。可以设置一个可选的秒数,表示响应不能已经过时超过该给定的时间。
-
min-fresh=<seconds>
表示客户端希望获取一个能在指定的秒数内保持其最新状态的响应。
-
stale-while-revalidate=<seconds>
表明客户端愿意接受陈旧的响应,同时在后台异步检查新的响应。秒值指示客户愿意接受陈旧响应的时间长度。
-
stale-if-error=<seconds>
表示如果新的检查失败,则客户愿意接受陈旧的响应。秒数值表示客户在初始到期后愿意接受陈旧响应的时间。
重新验证和重新加载
-
must-revalidate
一旦资源过期(比如已经超过max-age
),在成功向原始服务器验证之前,缓存不能用该资源响应后续请求。
-
proxy-revalidate
与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略。
-
immutable
表示响应正文不会随时间而改变。资源(如果未过期)在服务器上不发生改变,因此客户端不应发送重新验证请求头(例如If-None-Match
或If-Modified-Since
)来检查更新,即使用户显式地刷新页面。在Firefox中,immutable只能被用在 https://
transactions. 有关更多信息,请参阅这里。
其他
例子:
禁止缓存
发送如下响应头可以关闭缓存。此外,可以参考Expires
和Pragma
消息头。
Cache-Control: no-store
缓存静态资源
对于应用程序中不会改变的文件,你通常可以在发送响应头前添加积极缓存。这包括例如由应用程序提供的静态文件,例如图像,CSS文件和JavaScript文件。另请参阅Expires标题。
Cache-Control:public, max-age=31536000
需要重新验证
指定 no-cache
或 max-age=0, must-revalidate
表示客户端可以缓存资源,每次使用缓存资源前都必须重新验证其有效性。这意味着每次都会发起 HTTP 请求,但当缓存内容仍有效时可以跳过 HTTP 响应体的下载。(即强制缓存后协商缓存)
Cache-Control: no-cache
Copy to Clipboard
Cache-Control: max-age=0, must-revalidate
Copy to Clipboard
注意: 如果服务器关闭或失去连接,下面的指令可能会造成使用缓存。
Cache-Control: max-age=0
Connection
Connection: Keep-AliveKeep-Alive:timeout=5,max=1000
当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
timeout
:请求的连接时间不能少于5smax
:在连接关闭之前服务器能够接收到的最大请求数
Connection: close
代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭:当客户端再次发送Request,需要重新建立TCP连接
Date
日期 时间,是格林威治时间,比北京时间慢八小时
Pragma
只用于客户端发送请求中,客户端会要求所有的中间服务器不返回缓存的资源
http1.0 不使用缓存,Pragma:no-cache
http1.1
- Cache-Control:no-cache
- Pragma:no-cache
如果所有的中间服务器都实现http1.1,那么直接Cache-Control:no-cache
Pragma: no-cache可以应用到http 1.0 和http 1.1,而Cache-Control: no-cache只能应用于http 1.1
Trailer
允许发送方在分块发送的消息后面添加额外的元信息,这些元信息可能是随着消息主体的发送动态生成的,比如消息的完整性校验,消息的数字签名,或者消息经过处理之后的最终状态等
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
Trailer: Expires
7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
7\r\n
Network\r\n
0\r\n
Expires: Wed, 21 Oct 2015 07:28:00 GMT\r\n
\r\n
Transfer-Encoding
Transfer-Encoding: chunked
Transfer-Encoding: chunked
Transfer-Encoding: compress
Transfer-Encoding: deflate
Transfer-Encoding: gzip
Transfer-Encoding: identity // 以上都是压缩的,identity是未经过压缩的
// Several values can be listed, separated by a comma
Transfer-Encoding: gzip, chunked
chunked仅仅是HTTP1.0有效,HTTP2.0就不再支持分块传输,而提供了自己更有效的数据传输机制
分块编码主要应用于如下场景,即要传输大量的数据,但是在请求在没有被处理完之前响应的长度是无法获得的。例如,当需要用从数据库中查询获得的数据生成一个大的HTML表格的时候,或者需要传输大量的图片的时候。一个分块响应形式如下:
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
7\r\n
Network\r\n
0\r\n
\r\n
Upgrade
Via
为了跟踪客户端和服务器之间的请求/响应路径,避免循环请求 以及能够识别请求/响应链中发送者协议的功能
via字段由代理服务器添加,不管是正向代理还是反向代理,并且可以出现在请求标头和响应表头中
via后面的1.0 1.1 是接收服务器上的http版本,via是为了跟踪路径,经常和trace方法一起使用
Warning
即将被弃用
请求头
Accept
用来告知(服务器)客户端可以处理的内容类型
Accept: <MIME_type>/<MIME_subtype>Accept: <MIME_type>/*Accept: */*// Multiple types, weighted with the quality value syntax:Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8例子:Accept: text/htmlAccept: image/*Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8
q表示权重,1.0默认不写
Accept-Ranges
用于范围请求
Accept-Ranges: bytesAccept-Ranges: none 范围请求的单位是 bytes (字节)
Accept-Encoding
客户端能够处理的的压缩编码。通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是指字符编码)
Accept-Encoding: gzipAccept-Encoding: compressAccept-Encoding: deflateAccept-Encoding: brAccept-Encoding: identityAccept-Encoding: *// Multiple algorithms, weighted with the quality value syntax:Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5
gzip
表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及32位CRC校验的编码方式。
compress
采用 Lempel-Ziv-Welch (LZW) 压缩算法。
deflate
采用 zlib 结构和 deflate 压缩算法。
br
表示采用 Brotli 算法的编码方式。
identity
用于指代自身(例如:未经过压缩和修改)。除非特别指明,这个标记始终可以被接受。
*
匹配其他任意未在该请求头字段中列出的编码方式。假如该请求头字段不存在的话,这个值是默认值。它并不代表任意算法都支持,而仅仅表示算法之间无优先次序。
Accept-Language
客户端需要服务端返回的语言
Accept-Language: zh-CN,zh;q=0.9Accept-Language: en-US;en
Accept-Charset
客户端能接受的字符集
Accept-charset: utf-8, iso-8859-1;q=0.5, *;q=0.1
Expect
如果服务器没有办法完成客户端所期望完成的事情并且服务端存在错误的话,返回417 Exception Failed
- http1.1只规定了100-continue
- 如果能完成期望返回100
- 不能完成期望或返回任何其他4xx,会返回417
例子:
大消息体
客户端发送带有Expect消息头的请求,等服务器回复后再发送消息体。
PUT /somewhere/fun HTTP/1.1Host: origin.example.comContent-Type: video/h264Content-Length: 1234567890987Expect: 100-continue
服务器开始检查请求消息头,可能会返回一个状态码为 100(Continue) 的回复来告知客户端继续发送消息体,也可能会返回一个状态码为417 (Expectation Failed) 的回复来告知对方要求不能得到满足
From
告知服务器使用用户代理的电子邮件地址。通常情况下,使用目的是显示搜索引擎等用户代理的负责人电子邮件
From: webmaster@example.org
If开头是条件请求 用到的标头
If-Match
请求资源的时候用到,与服务器上的ETag的值对比,防止丢失更新,两者一样则返回412
If-None-Match
在http缓存中使用到
If-Modified-Since
在http缓存中使用到
If-Range
如果满足条件,时间或者ETage,则返回资源
If-Range: Wed, 21 Oct 2015 07:28:00 GMTIf-Range: bfc13a64729c4290ef5b2c2730249c88ca92d82d
If-Unmodified-Since
服务器只有在给定日期之后没有对其进行修改时,服务器才会返回资源
If-Unmodified-Since: Wed, 21 Oct 2015 07:28:00 GMT
Proxy-Authorization
客户端和代理服务器的认证
Proxy-Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Range
断点续传 会讲到
TE
…
Host
指明了请求将要发送到的服务器主机名和端口号
例如:localhost:8080
Referer
包含了当前请求页面的来源页面的地址,可用于防盗链处理
Referer: https://developer.mozilla.org/en-US/docs/Web/JavaScript
请求头可能暴露用户的浏览历史,涉及到用户的隐私问题。
Origin
请求首部字段 Origin
指示了请求来自于哪个站点。该字段仅指示服务器名称,并不包含任何路径信息。该首部用于 CORS 请求或者 POST
请求。除了不包含路径信息,该字段与 Referer
首部字段相似
Origin: https://developer.mozilla.org
User-Agent
浏览器的用户代理字符串。告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4651.0 Safari/537.36
或者是 postman ,或者是java程序发出的
伪装成浏览器
httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36)");
Authorization
通常用在服务器以401未经授权状态和WWW-Authenticate:Basic
告知客户端需要认证信息
Cookie
k1=v1,k2=v2发送给服务器
响应标头
Accept-Ranges
服务器能够处理客户端的请求
Accept-Ranges:bytes
不能处理客户端的请求
Accept-Ranges:none
具体参考HTTP的断点续传
Age
告诉客户端源服务器在多久之前创建了响应,单位s,Age通常接近0,如果是0则可能是从源服务器获取的,如果不是,表示可能是由代理服务器创建,那么Age的值表示的是缓存后的响应再次发起认证到认证完成的时间值。代理创建响应时必须加上Age
Age:24
Expires
**Expires**
响应头包含日期/时间, 即在此时候之后,响应过期
无效的日期,比如 0, 代表着过去的日期,即该资源已经过期
如果在Cache-Control
响应头设置了 “max-age” 或者 “s-max-age” 指令,那么 Expires
头会被忽略。
Expires: Wed, 21 Oct 2015 07:28:00 GMT
ETag
条件请求就是根据ETag的值进行匹配的
特定版本的标识,它能够缓存变得更高效并能够节省宽带,因为如果缓存内容未发生变化,web服务器则不需要重新发送完整的响应,ETag能够防止资源同时更新互相覆盖
给定URL的资源变化了,必须生成一个新的ETag值
location
表示重定向的URL
Proxy-Authenticate
表示客户端与代理之间认证
- Proxy-Authenticate:Basic
- Proxy-Authenticate:Basic realm = “Access to the internal site”
WWW-Authenticate
401
- WWW-Authenticate:Basic
- WWW-Authenticate:Basic realm=“Access to the staging site”, charset=“UTF-8”
Retry-After
告知客户端需要多久重新发送请求
有三种情况
- 当发送503(服务不可用),服务预计多长时间不可用
- 当发送429(请求太多),发出新请求要等多长时间
- 当发送重定向的响应像是301(永久移动),发出重定向请求之前要求客户端等待的最短时间
形式:
- Retry-After:Mon, 04 Oct 2021 13:21:05 GMT
- Retry-After:120 (单位是秒)
Server
服务器
Server:Apache/2.4.1(UNIX)
Vary
确定如何匹配请求标头,以决定是否可以使用缓存的响应,而不是从服务器请求一个新的响应
比如Vary: Accept-Encoding,User-Agent,那么Accept-Encoding与User-Agent两个请求头的内容,就会作为判断是否返回缓存数据的依据,当缓存服务器中相同请求的缓存数据的编码格式、代理服务与当前请求的编码格式、代理服务一致,那就返回缓存数据,否则就会从服务器重新获取新的数据
关于Vary详细
https://blog.csdn.net/qq_29405933/article/details/84315254
Access-Control-Allow-Origin
告诉浏览器允许该来源访问资源
Access-Control-Allow-Origin:https://mozilla.org,表示允许源https://mozilla.org访问资源
如果服务器指定单个来源而不是*
的话,还应在Vary加上Origin 即 Vary:Origin
实体标头
用于请求和响应中
Allow
405 Method Not Allowed,就是客户端和服务端的请求类型不一致
Allow:GET,POST,HEAD
MIME type
Multipurpose Internet Mail Extensions 多用途互联网邮件扩展类型
组成:
MIME-Version | MIME版本 | 1.0 |
---|
Content-Type | 内容类型 | application/x-www-form-urlencoded,application/json |
Content-Transfer-Encoding | 编码格式 | 8bit,binary |
Content-Disposition | 内容排列方式 | 上传和下载需要设置 |
… … | | |
通用结构 type/subtype,MIME类型对大小写不敏感,但是传统写法都是小写
独立类型
text开头
- text/html: HTML格式
- text/plain:纯文本格式
- text/xml: XML格式
图片格式
- image/gif :gif 图片格式
- image/jpeg :jpg 图片格式
- image/png:png 图片格式
- …
application开头
- application/xhtml+xml:XHTML 格式
- application/xml:XML 数据格式
- application/atom+xml:Atom XML 聚合格式
- application/json:JSON 数据格式,不需要加上字符集(application/json; charset = utf-8)
- application/pdf:pdf 格式
- application/msword:Word 文档格式
- application/octet-stream:二进制流数据(如常见的文件下载)这是应用程序文件的默认值。意思是 *未知的应用程序文件 ,*浏览器一般不会自动执行或询问执行。浏览器会像对待 设置了HTTP头
Content-Disposition
值为 attachment
的文件一样来对待这类文件 - application/x-www-form-urlencoded:表单发送默认格式
媒体文件
- audio/x-wav:wav文件
- audio/x-ms-wma:w文件
- audio/mp3:mp3文件
- video/x-ms-wmv:wmv文件
- video/mpeg4:mp4文件
- video/avi:avi文件
Multipart类型
multipart/form-datamultipart/byteranges
multipart/byteranges
用于把部分的响应报文发送回浏览器。当发送状态码206Partial Content
时,这个MIME类型用于指出这个文件由若干部分组成,每一个都有其请求范围。就像其他很多类型Content-Type
使用分隔符来制定分界线。每一个不同的部分都有Content-Type
这样的HTTP头来说明文件的实际类型,以及 Content-Range
来说明其范围。
HTTP/1.1 206 Partial ContentAccept-Ranges: bytesContent-Type: multipart/byteranges; boundary=3d6b6a416f9b5Content-Length: 385--3d6b6a416f9b5Content-Type: text/htmlContent-Range: bytes 100-200/1270eta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="vieport" content--3d6b6a416f9b5Content-Type: text/htmlContent-Range: bytes 300-400/1270-color: #f0f0f2; margin: 0; padding: 0; font-family: "Open Sans", "Helvetica--3d6b6a416f9b5--
服务器通过后缀在conf/web.xml文件中找到对应的mime-mapping–》设置响应头Content-Tpye的值为mime-type的值
网页表单enctype可用的MIME 类型,即发送post请求时,可以在请求头设置的MIME类型
- application/x-www-form-urlencoded 数据被编码为名称/值对。这是标准的编码格式,默认行为
- multipart/form-data
(一般用来上传文件)
: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分 - text/plain数据以纯文本形式
postman的raw 可以是text/html/xml/json/javascript
Content-Dispostion
Content-Disposition: inlineContent-Disposition: attachmentContent-Disposition: attachment; filename="filename.jpg"
在 HTTP 场景中,第一个参数或者是 inline
(默认值,表示回复中的消息体会以页面的一部分或者整个页面的形式展示),或者是 attachment
(意味着消息体应该被下载到本地;大多数浏览器会呈现一个“保存为”的对话框,将 filename
的值预填为下载后的文件名,假如它存在的话)。
content-type
句法
Content-Type: text/html; charset=utf-8Content-Type: multipart/form-data; boundary=something
media-type
charset
boundary
- 对于多部分实体,boundary 是必需的,其包括来自一组字符的1到70个字符,已知通过电子邮件网关是非常健壮的,而不是以空白结尾。它用于封装消息的多个部分的边界
Content-Encoding
上面说了,Accept-Encoding是客户端希望返回的内容编码,但是实际上服务端返回给客户端的内容编码是根据,Content-Encoding来返回的
Content-Language
服务端用的语言
Content-Length
服务器发送给客户端的实体大小,以字节为单位
Content-Length:3000,总共3000字节
Content-Range
告知客户端响应实体的哪部分是符合客户端请求的,以字节为单位
Content-Range:bytes 200 - 1000/67589
表示从所有67589字节中,返回200-1000字节的内容
Content-Location
表示用于访问资源的直接URL,无需进一步的内容协商
Content-MD5
客户端会对接收的报文主体执行相同的MD5算法,然后与首部字段Content-MD5字段进行比较,
目的在于检查报文主体在传输过程中是否保持完整,有无被修改的情况,以及确认传输到达
Last-Modified
资源最后的修改时间,它用作验证器来确定接收或存储的资源是否相同。它的作用不如ETag那么准确
-
Content-Security-Policy:
connect-src * blob:;img-src * data: blob:; worker-src * blob:
-
Strict-Transport-Security:
max-age=63072000; includeSubdomains; preload
-
Transfer-Encoding:
chunked
-
Access-Control-Allow-Headers:
Access-Control-Expose-Headers:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)