1.HTTP报文首部
HTTP请求报文:
在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成
HTTP响应报文:
在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成。
2.通用首部字段
通用首部字段是指,请求报文和响应报文双方都会使用的首部
Cache-Control:
首部字段Cache-Control能够控制缓存的行为
1- public指令:当指定使用public指令时,则明确表明其他用户也可利用缓存 Cache-Control: public 2- private指令:当指定private指令后,响应只以特定的用户作为对象,这与public指令的行为相反 Cache-Control: private 3- no-cache指令:如果服务器返回的响应中包含no-cache指令,那么缓存服务器不能对过期的资源进行缓存(假的不缓存) Cache-Control: no-cache 不要缓存响应报文中的Location字段,其他的可以缓存 Cache-Control: no-cache=Location 4- no-store指令:该指令规定缓存不能在本地存储请求或响应的任一部分(真的不缓存) Cache-Control: no-store 5- s-maxage指令: 设置公共代理缓存服务器的过期时间 Cache-Control: s-maxage=604800(单位:秒) 6- max-age指令:当客户端发送的请求中包含max-age指令时,如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源 当服务器返回的响应中包含max-age指令时,缓存服务器将不对资源的有效性再作确认,而max-age数值代表资源保存为缓存的最长时间 Cache-Control: max-age=604800(单位:秒) 7- min-fresh指令: 求缓存服务器返回至少还未过指定时间的缓存资源 当指定min-fresh为60秒后,在这60秒以内如果有超过有效期限的资源都无法作为响应返回了 Cache-Control: min-fresh=60(单位:秒) 8- max-stale指令:可指示缓存资源,即使过期也照常接收 如果指令未指定参数值,那么无论经过多久,客户端都会接收响应;如果指令中指定了具体数值,那么即使过期,只要仍处于max-stale指定的时间内,仍旧会被客户端接收 Cache-Control: max-stale=3600(单位:秒) 9- must-revalidate指令:使用must-revalidate指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效 Cache-Control: must-revalidate 10- proxy-revalidate指令:要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性 Cache-Control: proxy-revalidate
Connection:
Connection
首部字段具备如下两个作用:
- 控制不再转发给代理的首部字段
Connection: 不再转发的首部字段名
- 管理持久连接
Connection: close
Connection: Keep-Alive
Date:
首部字段Date
表明创建HTTP报文的日期和时间
Date: Tue, 03 Jul 2012 04:40:59 GMT
ransfer-Encoding:
首部字段Transfer-Encoding规定了传输报文主体时采用的编码方式
例如:
HTTP/1.1200 OK Date: Tue, 03 Jul 2012 04:40:56 GMT Cache-Control: public, max-age=604800 Content-Type: text/javascript; charset=utf-8 Expires: Tue, 10 Jul 2012 04:40:56 GMT X-Frame-Options: DENY X-XSS-Protection: 1; mode=block Content-Encoding: gzip Transfer-Encoding: chunked Connection: keep-alive cf0 ←16进制(10进制为3312) ...3312字节分块数据... 392 ←16进制(10进制为914) ...914字节分块数据... 0
Upgrade:
首部字段Upgrade用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议
使用首部字段Upgrade时,还需要额外指定Connection:Upgrade🛺
Via:
报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发
首部字段Via不仅用于追踪报文的转发,还可避免请求回环的发生。所以必须在经过代理时附加该首部字段内容
3.请求首部字段
请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容
Accept:
Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:
Accept-Charset
首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
Accept-Encoding:
Accept-Encoding
首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序
Accept-Encoding: gzip, deflate
Accept-Language:
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
Authorization:
首部字段Authorization
是用来告知服务器,用户代理的认证信息
Host:
首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号
If-Match:
只有当If-Match
的字段值跟ETag值匹配一致时,服务器才会接受请求
If-Match: "123456"
If-Modified-Since:
如果在If-Modified-Since
字段指定的日期时间后,资源发生了更新,服务器会接受请求
If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT
If-Unmodified-Since:
If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT
1
首部字段If-Unmodified-Since和首部字段If-Modified-Since的作用相反。它的作用的是告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况
下,才能处理请求
If-Range:
首部字段If-Range属于附带条件之一。它告知服务器若指定的If-Range字段值(ETag值或者时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之,则返回全体资源
Max-Forwards:
Max-Forwards: 10
每次转发数值减1。当数值变0时返回响应
Proxy-Authorization:
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5
这个行为是与客户端和服务器之间的HTTP访问认证相类似的,不同之处在于,认证行为发生在客户端与代理之间
Range:
Range: bytes=5001-10000
包含首部字段Range
即可告知服务器资源的指定范围。上面的示例表示请求获取从第5001字节至第10000字节的资源
Referer:
首部字段Referer
会告知服务器请求的原始资源的URI
User-Agent:
User-Agent
用于传达浏览器的种类
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/=> 20100101 Firefox/13.0.1