简介
我们知道http请求报文首部由请求行(方法、URI、http版本)及首部字段组成,响应报文首部由响应行(http版本、状态码、状态原因)及首部字段组成。 使用首部字段的目的是为了给浏览器和服务器提供报文主体的大小、所使用语言、认证信息等内容。
首部字段分为:通用首部字段,请求首部字段,响应首部字段、实体首部字段。
1. 通用首部字段
通用首部字段,请求报文和响应报文都使用的字段;
1.1 通用首部字段:Cache-Control
和缓存相关的指令,可以多个参数用’,’分隔: Cache-Control:private, max-age=0, no-cache
1.1.1 public
响应指令:Cache-Control:public。
服务器返回给某个客户端的缓存,也可被其它任意客户端利用,这个缓存是公共的。
1.1.2 private
响应指令:Cache-Control:private。
服务器返回给某个客户端的缓存,即使其它客户端需要这样的数据,这个缓存也不会给其它客户端用,这个缓存是私有的。
1.1.3 no-cache
请求和响应指令:Cache-Control:no-cache。
客户端请求:不管缓存是何种情况,我必须从源服务器中获取最新的资源,这样是为了防止拿到过期的资源。
服务端响应:此响应缓存服务器可以把它保存下来,但是每次缓存服务器要将此响应返回给客户端之前都必须找源服务器确认一下数据。
1.1.4 no-store
请求和响应指令:Cache-Control:no-store。
对于客户端和服务端而言,该指定规定缓存不能在任何位置存储任何东西,我们可以将其看做是不缓存。
1.1.5 max-age
请求和响应指令:Cache-Control:max-age=60。
客户端请求:在第一次请求后的60秒内,再请求可以直接将缓存给我。等于0时,缓存服务器需要将请求转发给源服务器。
max-age=0和no-cache的区别:no-cache强制直接向源服务器请求不经过缓存服务器,而max-age=0需要经过缓存服务器。
服务端响应:在第一次返回缓存之后的60秒内如果缓存服务器需要返回此缓存时,不需要向源服务器进行确认就可以直接发送。
1.1.6 min-fresh
请求指令:Cache-Control:min-fresh=60。
在这60秒以内过期的资源无法作为响应进行返回。
1.1.7 max-stale
请求指令:Cache-Control:max-stale=60。
客户端在这60秒内请求的缓存即使过期了也可照常接收。
1.1.8 only-if-cached
请求指令:Cache-Control:only-if-cached。
客户端请求缓存,有缓存则返回,无缓存返回504状态码。
1.1.9 must-revalidate
响应指令:Cache-Control:must-revalidate。
代理会向源服务器再次验证即将返回的响应缓存是否仍然有效。
1.2. 通用首部字段:Connection
它主要有两个作用:一控制代理不再转发首部字段,二持久连接管理。
1.2.1 控制代理不再转发首部字段
1.2.2 持久连接管理
我们知道在http1.1版本中所有连接默认是持久连接,如果我们向手动地断开连接可以这样:Connection: close。 为了兼容其它版本的http,我们这样设置:Connection: Keep-Alive。
1.3 通用首部字段:Date
表示创建报文的日期和时间。
Date: Tue, 03 Jul 2017 10:40:00 GMT
Date: Tue, 03-Jul-17 10:41:03 GMT
Date: Tue Jul 03 10:41:25 2017
1.4 通用首部字段:Pragma
Pragma是为了兼容Http版本而存在,比如Cache-Control:no-cache是针对http1.1版本而设置的,如果中间服务器不全是http1.1版本,我们要达到同样的目的应该设置:
Cache-Control: no-cache Pragma: no-cache
1.5 其它字段:Transfer-Encoding、Via、Warning
因为这些通用首部字段作用比较容易理解,所以就大致阐述下。
Transfer-Encoding:规定传输报文主体时用的编码格式,chunked表示分块传输。
Via:为了追踪传输路径,报文经过代理或者网关时,会在Via中添加该服务器的信息。
Warning:该首部会告知一些和缓存相关的警告。
2. 请求首部字段
请求首部字段,从客户端向服务器发送请求报文时使用的首部;
2.1 Accept
Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的优先级,type/subtype。
文本类型:text/html、text/plain…
图片类型:image/jpeg、image/gif、image/png…
视频文件:video/mpeg、video/quicktime
二进制文件:application/octet-stream、application/zip…
2.2 Accept-Charset
通知服务器用户代理支持的字符集及字符集的相对优先级顺序。 Accept-Charset: iso-8859-5, unicode-1-1
2.3 Accept-Encoding
通知服务器用户代理支持的内容编码及内容编码的优先级。
2.4 Accept-Language
通知服务器用户代理能够处理的语言及相对优先级。
2.5 Authorization
客户端和源服务器之间的认证信息。 Authorization: Basic dWVub3N1bjpwYXNzd29yZA==
2.6 Proxy-Authorization
客户端和代理服务器之间的认证信息。
2.7 From
客户端告诉服务器如果有事请联系这个邮箱地址。 From: 553453829@qq.com
2.8 Host
我们通过域名转换成ip地址来连接服务器,通过ip地址我们可以找到服务器地址,如果一台服务器上运行了几台虚拟主机,那么这些虚拟主机的ip地址都是相同的,所以此时仅仅靠ip无法确定是哪台虚拟主机,这个时候我们需要告知服务器Host,Host会告知服务器,请求的资源所处的互联网主机名和端口号。 Host: www.hackr.jp
2.9 If-Match
在服务器端会有一个特定的标记实体标记ETag,里面会存放和资源相关的值,当客户端请求的If-Match值和服务器ETag的值完全匹配时,服务器才会执行请求,反之返回状态码412。
2.10 If-None-Match
只有在If-None-Match的字段值和ETag值不一致时,才处理该请求,一致返回状态码412。它的作用和If-Match是相反的。
2.11 If-Modified-Since
如果资源在指定日期之后更新过则服务器执行客户端请求,如果在这之后资源没有更新过返回状态码304。
2.12 If-Unmodified-Since
它和If-Modified-Since的作用是相反的。如果资源在指定日期之后没有更新过则服务器执行请求,否则返回状态码412。
2.13 If-Range
如果该字段值和ETag中的值相匹配则返回指定返回内的值,如果不匹配则返回全部资源。
2.14 Range
只获取部分资源,Range: bytes=5001-10000,能处理该范围请求时返回206,不能处理该范围请求时返回200。
2.15 Referer
告诉服务器请求是从哪里发出的。
Referer: www.hackr.jp/index.html
2.16 User-Agent
用于传达浏览器的种类。
3. 响应首部字段
响应首部字段,从服务器向客户端返回响应报文时使用的首部;
3.1 Accept-Range
告知客户端服务器是否能处理资源范围请求,若能返回资源范围,若不能返回none。
Accept-Range: bytes=5001-10000
Accept-Range: none
3.2 Age
告诉客户端服务器在多久前创建了响应。
3.3 ETag
对服务器端资源的唯一标记方式,服务器会为每份资源分配对应的ETag值。当资源更新时ETag值也会改变。
3.4 Location
用来告诉客户端访问的资源已经被转移到了该值的下面,会返回3XX重定向的状态码。
3.5 Retry-After
告诉客户端在N时间后再发送请求,配合返回503或3XX状态码。
3.6 Server
告诉客户端当前服务器上安装的HTTP服务器应用程序的信息。
3.7 Proxy-Authenticate
代理服务器所要求的认证信息发送给客户端。
3.8 WWW-Authenticate
源服务器所要求的认证信息发送给客户端。
4. 实体首部字段
实体首部字段,针对请求报文和响应报文的实体部分使用的首部。
4.1 Allow
客户端通过OPTIONS方法来询问服务器支持哪些方法,服务器通过Allow返回是否支持该方法。如果支持该方法直接返回该方法,如果不支持,则返回状态吗405且将支持的所有方法返回。
4.2 Content-Encoding
会告知客户端服务器对实体的主体部分选用的内容编码方式。
4.3 Content-Language
会告知客户端实体主体使用的语言。
4.4 Content-Length
会告知客户端实体主体的大小。
4.5 Content-Range
告知返回的实体的哪个部分符合范围要求。
4.6 Content-Type
说明了实体主体的类型,类型和请求首部字段Accept一致。
4.7 Last-Modified
资源最终修改时间。