第六章:HTTP首部
- 6.1 HTTP 报文首部
- 6.2 HTTP 首部字段
- 6.3 HTTP/1.1 通用首部字段
- 6.4 请求首部字段
-
- 6.4.1 Accept
- 6.4.2 Accept-Charset
- 6.4.3 Accept-Encoding
- 6.4.4 Accept-Language
- 6.4.5 Authorization
- 6.4.6 Expect
- 6.4.7 Form
- 6.4.8 Host
- 6.4.9 If-Match
- 6.4.10 If-Modified-Since
- 6.4.11 If-None-Match
- 6.4.12 If-Range
- 6.4.13 If-Unmodified-Since
- 6.4.14 Max-Forwards
- 6.4.15 Proxy-Authorization
- 6.4.16 Range
- 6.4.17 Referer
- 6.4.18 TE
- 6.4.19 User-Agent
- 6.5 响应首部字段
- 6.6 实体首部字段
- 6.7 为Cookie 服务的首部字段
HTTP协议的请求和响应报文中必定包含HTTP首部,只是我们平时在使用Web的过程中感受不到它。
6.1 HTTP 报文首部
报文首部由几个字段构成。
HTTP 请求报文
在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成。
HTTP 响应报文
在响应中,HTTP报文由HTTP版本、状态码、HTTP首部字段三部分构成。
6.2 HTTP 首部字段
6.2.1 HTTP 首部字段传递重要信息
首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
6.2.2 HTTP 首部字段结构
HTTP首部字段是由首部字段和字段值构成的,格式为:
首部字段名:字段值
Content-Type首部字段表示报文主体的对象类型。
Content-Type:text/html
若HTTP首部字段重复了会如何呢?
这种情况根据浏览器内部处理逻辑的不同,结果可能不一致。
6.2.3 4种HTTP首部字段类型
- 通用首部字段(请求报文和响应报文两方都会使用的首部)
- 请求首部字段
- 响应首部字段
- 实体相应字段
6.2.4 HTTP/1.1 首部字段
1.1规范定义了如下47种首部字段:
6.2.5 非 HTTP/1.1 首部字段
例如:Cookie、Set-Cookie、Content-Disposition等在其他RFC中定义的首部字段。
6.2.6 End-to-end 首部和 Hop-by-hop 首部
HTTP首部字段将定义成缓存代理和非缓存代理的行为。
- 端到端首部
此类首部会转发给请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,并且必须被转发。 - 逐跳首部
此类首部只对单次转发有效,会因通过缓存或代理而不在转发。
HTTP/1.1 中仅有的8个逐跳首部字段:
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- Trailer
- TE
- Transfer-Encoding
- Upgrade
6.3 HTTP/1.1 通用首部字段
6.3.1 Cache-Control
通过该指令就能操作缓存的工作机制。
Cache-Control 指令一览:
下边解释一些指令:
6.3.2 Connection
该字段有两个作用:
-
控制不再转发给代理的首部字段
-
控制持久连接
HTTP1.1 之前默认都是非持久化连接.。持久连接需要加上== Keep-Alive==
6.3.3 Data
该首部字段表明创建HTTP 报文的日期和时间。
6.3.4 Pragma
该字段是历史遗留字段,Cache-Control 指定是最理想的。但是可能中间服务器的版本不知道,一般会同含有两个字段。
6.3.5 Trailer
该首部字段会事先说明报文主体后记录了那些首部字段,可应用在分块传输编码时。分块传输见:第三章:HTTP报文内的HTTP信息
6.3.6 Transfer-Encoding
该首部字段规定了报文主体采用的编码方式。HTTP/1. 的传输编码方式仅对分块传输编码有效。
6.3.7 Upgrade
该字段用于检测HTTp协议及其他协议是否可使用跟高的版本进行通信。
该字段产生作用的对象仅限于客户端与临界服务器之间。因此需要搭配Connection:Upgrade。
6.3.8 Via
这个字段之前提到过,在代理服务器那块。用于记录经过的代理服务器,可以避免请求回环。
6.3.9 Warning
该首部通常会告知用户一些与缓存相关的问题的警告。
格式:
相关警告码:
6.4 请求首部字段
该字段用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。
6.4.1 Accept
6.4.2 Accept-Charset
6.4.3 Accept-Encoding
6.4.4 Accept-Language
6.4.5 Authorization
6.4.6 Expect
6.4.7 Form
用来告知服务器使用用户代理的用户的电子邮件地址。
6.4.8 Host
6.4.9 If-Match
条件请求:
6.4.10 If-Modified-Since
6.4.11 If-None-Match
6.4.12 If-Range
否则全部返回:
6.4.13 If-Unmodified-Since
和If-Modified-Since 相反,在日期之后未发生更新,才能处理请求。
6.4.14 Max-Forwards
6.4.15 Proxy-Authorization
接收到从代理服务器发来的认证质询时,客户端会发送包含该首部字段的请求,已告知服务器认证所需要的信息。
6.4.16 Range
指定资源范围。
6.4.17 Referer
6.4.18 TE
该字段会告知服务器客户端能够处理响应的传输编码方式及相对优先级。
6.4.19 User-Agent
6.5 响应首部字段
6.5.1 Accept-Range
6.5.2 Age
6.5.3 ETag
6.5.4 Location
6.5.5 Proxy-Authenticate
6.5.6 Retry-After
6.5.7 Server
6.5.8 Vary
6.5.9 WWW-Authenticate
该字段用于HTTP访问认证。
6.6 实体首部字段
6.6.1 Allow
6.6.2 Content-Encoding
6.6.3 Content-Language
6.6.4 Content-Length
6.6.5 Content-Location
6.6.6 Content-MD5
6.6.7 Content-Range
6.6.8 Content-Type
6.6.9 Expires
6.6.10 Last-Modified
6.7 为Cookie 服务的首部字段
相关Cookie的可以参考:深入理解HTTP协议
参考文献:《图解HTTP》