HTTP 首部
首部
通用首部字段
Cache-Control(控制缓存的行为)
no-cache
Cache-Control: no-cache
使用no-cache为了防止从缓存中返回过期的资源。缓存服务器会向源服务器进行有效期确认后处理资源。
no-store
Cache-Control: no-store
当使用no-store指令时,暗示请求和对应的响应中包含机密信息。因此,该指令规定缓存不能在本地存储请求或响应的任一部分。
s-maxage
Cache-Control: s-maxage=604800 (单位:秒)
表示处理公共代理服务器的情况下缓存过期没有超过指定的时间时,就会返回缓存。只适用于供多位用户使用的公共缓存服务器,对于同一个用户重复返回相应的服务器来说,这个指令没有任何作用。当使用 s-maxage指令后,则直接忽略对 Expires 首部字段及 max-age 指令的处理。
max-age
Cache-Control: max-age=604800(单位:秒)
缓存的最大有效时间,应用HTTP/1.1版本的缓存服务器遇到同时存在 Expires首部字段的情况时,会优先处理 max-age指令,而忽略掉 Expires首部字段,而HTTP/1.0刚好相反。如果,值为0时,表示代理服务器需要将请求转发给源服务器。
min-fresh
Cache-control: min-fresh=60(单位:秒)
要求缓存服务器返回未过指定时间的缓存资源。
max-stale
Cache-control: max-stale=3600(单位:秒)
使用 max-stale 可以指示缓存资源,即使过期也照常接收。如果,指令中,指定了具体的数值,那么即使过期,只要处于 max-stale指定时间内,仍旧会被客户端接收。
only-if-cached
Cache-control: only-if-cached
仅仅使用缓存,如果缓存服务器有指定缓存则返回,否则返回 504 Gateway Timeout。
must-revalidate
Cache-Control: must-revalidate
代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。must-revalidate指令会忽略掉 max-stale指令。
proxy-revalidate
Cache-Control: proxy-revalidate
要求所有的缓存服务器在接受到客户端带有该指令返回数据之前,必须再次验证缓存的有效性。
no-transform
Cache-Control: no-transform
无论是在请求还是在响应当中,缓存都不能改变实体主体的媒体类型。这样做可以防止缓存或代理压缩图片等类似操作。
Connection
控制不再转发给代理的首部字段
GET / HTTP/1.1
Upgrade: HTTP/1.1
Connection: Upgrade
如果中间有代理服务器,则经过代理服务器转发给源服务器的请求报文如下:
GET / HTTP/1.1
管理持久连接
Connection: close
HTTP/1.1 版本的默认连接都是持久连接,当服务器明确想断开连接时,则指定Connection的首部字段为 close。HTTP/1.1默认是打开的,而之前默认是关闭的。
Pragma
Pragma: no-cache
仅用在客户端发送请求的过程中,客户端要求所有的中间服务器不返回缓存的资源。Pragma 是 HTTP/1.1 之前版本的历史遗留字段,仅 作为与 HTTP/1.0 的向后兼容而定义
Date
表明创建HTTP报文的日期和时间
Date: Tue, 03 Jul 2012 04:40:59 GMT
Trailer
如果,报文采用了分块传输编码方式,就可以用这个首部列出位于报文
Transfer-Encoding
会事先说明在报文主体后记录了哪些首部字段,该首部字段可应用于HTTP/1.1 版本分块传输编码
Upgrade
用户检测HTTP协议及其其他协议是否可使用更高版本的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。
Via
为了追踪客户端与服务器之间的请求和响应报文的传输路径。
报文经过代理或者网关的时候,会先在首部字段Via中附加服务器信息,然后在进行转发。
Warning
HTTP/1.1 的 Warning 首部是从 HTTP/1.0 的响应首部(Retry-After)演变过来的,该首部通常会告知用户一些与缓存相关问题的警告。
请求首部字段
Accept
Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型。
文本文件
text/html,text/plain,text/css
application/xhtml+xml,application/xml
图片文件
image/jpeg,image/gif,image/png
视频文件
video/mpeg,video/quicktime
应用程序中使用的二进制文件
application/octet-stream,application/zip
若要给显示的媒体类型增加优先级,则使用q=来额外表示权重值,用分号(;)进行间隔。权重q的范围是 0 ~ 1(可精确到小数点后3位),且1为最大值。不指定权重q值时,默认权重为 q=1.0。当服务器提供多种内容时,将会首先返回权重最高的媒体类型。
Accept-Charset
Accept-Charset: iso-8859-5,unicode-1-1;q=0.8
通知服务器用户代理支持的字符集及字符集的相对优先顺序。
Accept-Encoding
Accept-Encoding: gzip,deflate
用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序,可一次指定多种内容编码。
压缩
gzip,compress,deflate
identity
不执行压缩或不会变化,默认的编码格式
Accept-Language
zh-Hans-US;q=1, en;q=0.9
用来告知服务器用户代理所能处理的自然语言集,以及自然语言集的相对优先顺序
Authorization
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==
用来告知服务器,用户代理的认证信息值。
Expect
Expect: 100-continue
告知服务器,期望出现的某种特定的行为。
Form
Form: xxxxxxx@gmail.com
用来告知服务器使用用户代理的用户的电子邮箱地址。
Host
Host: www.baidu.com
虚拟主机运行在同一个IP上,因此使用首部字段Host加以区分。
If-Match
If-Match: "123456"
服务器接收到,附带条件请求后,只有判断If-Match的字段值和资源ETag的值,仅当两者一致时,才会执行请求。
If-Modified-Since
If-Modified-Since: Mon, 05 Mar 2018 08:03:31 GMT
如果在If-Modified-Since指定的日期时间后,资源发生了更新,服务器会接受请求。
If-Unmodified-Since
与If-Modified-Since 作用刚好相反。
If-None-Match
If-None-Match: *
只有在If-None-Match的字段值与ETag值不一致时,可处理该请求。与If-Match首部字段的作用相反。
If-Range
If-Range: "123456"
告知服务器若指定If-Range字段值和请求资源的ETag值或时间一致时,则作为范围请求处理。反之,则返回全体资源。
Max-Forwards
Max-Forwards: 10
每次转发数值减1,当数值变为0的时候返回响应。
Proxy-Authorization
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5
接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。
Range
Range: bytes=5001-10000
对于只需获取部分资源范围内的请求,包含首部字段Range即可告知服务器资源的指定范围。
Referer
Referer: http://www.jianshu.com/writer#/notebooks/21560928/notes/24474419/preview
会告知服务器请求的原始资源的URI。
TE
TE: gzip,deflate;q=0.5
告知服务器,客户端能够处理响应传输的编码方式,及相对优先级。它和首部字段Accept-Encoding的功能很相像。
User-Agent
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5
会讲创建请求的浏览器和用户代理名称等信息传达给服务器。
响应首部字段
Accept-Ranges
Accept-Ranges: none
首部字段用来告知客户端是否能处理范围请求,以指定获取服务器某个部分的资源。
可指定的范围有两种,可处理指定范围内的请求指定其为 bytes,反之则指定其为none。
Age
Age: 600 (单位:秒)
首部字段Age能告知客户端,源服务器在多久前创建了响应。若创建响应的服务器是缓存服务器,Age的值是指缓存后的响应到再次发起认证到认证完成的时间值,代理创建响应时必须加上首部字段Age。
ETag
ETag: "82e22293907ce725faf67773957acd12"
能告知客户端的实体标识,服务器会为每份资源分配对应的ETag值。
强 ETag 值:
不论实体发生多么细微的变化都会改变其值。
弱ETag值:
ETag的值只用于提示资源是否相同。只有资源发生根本的改变,产生的差异才会改变ETag值。这时,会在字段最开始处附加:
ETag: W/"usagi-1234"
Location
Location: https://www.baidu.com
可以将响应接收方引导至某个与请求URI位置不同的资源。
Proxy-Authenticate
Proxy-Authenticate: Basic realm="Usagidesign Auth
会把代理服务器所要求的认证信息发送给客户端
Retry-After
Retry-After: 120(单位:秒)
告知客户端该在多久之后再次发送请求。
Server
Server: Apache/2.2.17 (Unix)
告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
Vary
Vary: Accept-Language
当代理服务器接收到带有Vary首部字段指定获取资源的请求时,如果使用的Accept-Language字段的值相同,那么就直接从缓存返回响应。反之,则需要从源服务器端获取资源后才能作为响应返回
WWW-Authenticate
WWW-Authenticate: Basic realm="Usagidesign Auth"
用于HTTP的访问认证
实体首部字段
Allow
Allow:GET,HEAD
用于通知客户端能够支持的Request-URI指定资源的所有的HTTP方法。当服务器收到不支持的HTTP方法时,会以状态码405 Method Not Allowed 作为响应返回。还会把所有能支持的HTTP方法写入首部字段Allow后返回。
Content-Encoding
Content-Encoding: gzip
告知客户端对实体的主体部分选用的内容编码方式。内容编码是指在不丢失实体信息的前提下进行的压缩。
压缩:
gzip
compress
deflate
不压缩:
identity
Content-Language
Content-Language: zh-CN
告知客户端,实体主体使用的自然语言
Content-Length
Content-Length: 15000
表明实体主体部分的大小(单位是字节)。
Content-Location
Content-Location: https://www.baidu.com
给出与报文主体相对应的URI。
Content-MD5
Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==
报文主体的MD5值。
Content-Range
Content-Range: bytes 5001-10000/10000
针对范围请求,返回响应时使用的首部字段 Content-Range ,能告知客户端作为响应返回的实体哪个部分符合范围请求。
Content-Type
Content-Type: application/octet-stream
实体主体内对象的媒体类型
Expires
Expires: Wed, 04 Jul 2012 08:26:05 GMT
会将资源失效的日期告知客户端
Last-Modified
Last-Modified: Wed, 23 May 2012 09:59:55 GMT
指明资源的最终修改时间