HTTP报文-首部分类
HTTP报文-首部
HTTP首部字段想请求和响应报文中添加了一些附加信息。
本质上来说,他们只是一些名/值对的列表。
请求报文和响应报文的结构
请求报文和响应报文的实例
HTTP报文-首部分类
HTTP首部可以分为以下5类
1. 通用首部
既可用于请求,也可用于响应。可以在客户端、服务器和其他应用程序之间提供通用功能。
2. 请求首部
是请求报文特有的。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
3. 响应首部
是响应报文特有的。为客户端提供信息,补充响应的附加内容,也会要求客户端附加额外的内容信息。
4. 实体首部
针对请求报文和响应报文的实体部分使用的首部。描述实体的长度和内容,或者更新时间。
5. 扩展首部
非标准HTTP规范,由程序开发者创建
通用首部(General-Header)
通用性息信首部-General
首部 | 描述 | 示例 |
---|---|---|
Connection | 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) | Connection: close |
Date | 报文创建的日期和时间,响应必须给出,缓存评估新鲜度 | Date: Tue, 15 Nov 2010 08:12:31 GMT |
Trailer | 如果报文采用了分块传输编码方式,就可以使用这个首部列出位于报文拖挂(Trailer)部分的首部集合 | Trailer: Content-Length |
Upgrade | 发送端想”升级“,向服务器指定某种传输协议以便服务器进行转换(如果支持),服务端回应101响应时,必须包含这个首部 | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
Via | 显示报文经过的中间节点(代理、网关) | Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
MIME-Version | 发送端使用的MIME版本 | MIME-Version: 1.0 |
Transfer-Encoding | 告知接收方对其采用了何种传输编码方式 | Transfer-Encoding:chunked |
通用缓存首部-Universal cache
首部 | 描述 | 示例 |
---|---|---|
Cache-Control | 【HTTP/1.1】指定请求和响应遵循的缓存机制 | Cache-Control: no-cache |
Pragma | 随报文传送一些指令。通常来控制缓存。迫使浏览器重新加载或刷新时,即使缓存新鲜也要请求服务器 | Pragma: no-cache |
请求首部(request header)
请求首部说明是谁或什么在发送请求、请求源自何处,或者客户端的喜好及能力。
服务器可以根据请求首部给出的客户端信息,试着为客户端提供更好的响应。
请求的信息性首部-Informational
首部 | 描述 | 示例 |
---|---|---|
From | 发出请求的用户的Email | From: user@email.com |
Host | 指定请求的服务器的域名和端口号,HTTP1.1规定客户端请求必须包含Host,否则它返回400 bad request | Host: www.zcmhi.com |
Referer | 使服务器知道客户端从哪里获得其请求的URL;先前网页的地址,当前请求网页紧随其后,即来路 | Referer: http://www.zcmhi.com/archives/71.html |
User-Agent | 告诉服务器发出请求的客户端信息 | User-Agent: Mozilla/5.0 (Linux; X11) |
UA-(CPU,Disp,OS,Color,Pixels) | 不推荐使用,客户端机器的CPU、显示器的尺寸和色彩深度、操作系统、显示器的颜色信息、显示器的像素信息 | UA-OS: Windows 95 |
Accept首部
Accept首部为客户端提供了一种将其喜好和能力告知服务器的方式,包括它们想要什么,可以使用什么,不想要什么。
Accept首部使连接的两端受益:
客户端会得到它们想要的内容,服务器则不会浪费其时间和带宽来发送客户端无法使用的东西。
首部 | 描述 | 示例 |
---|---|---|
Accept | 告诉服务器能够发送哪些媒体类型 | Accept: text/plain, text/html |
Accept-Charset | 客户端可以接受哪些字符集 | Accept-Charset: utf-8, gb2312 |
Accept-Encoding | 客户端可以接受哪些编码方式 | Accept-Encoding: compress, gzip, deflate, identity(默认不压缩) |
Accept-Language | 浏览器可以接受或优选哪种语言 | Accept-Language: en,zh |
TE | 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 | TE: trailers,deflate;q=0.5 |
条件请求首部-Conditional
首部 | 描述 | 示例 |
---|---|---|
Expect | 客户端告诉服务器他们需要某种行为,服务器给出反馈【成功:100 Continue ;失败:417 Expectation Failed】 | Expect: 100-continue |
If-Match | 只有请求内容与实体相匹配才有效,服务器对比If-Match首部的实体标记与当前的实体标记,匹配才返回对象 | If-Match: “737060cd8c284d8af7ad3082f209582d” |
If-None-Match | 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 | If-None-Match: “737060cd8c284d8af7ad3082f209582d” |
Range | 只请求实体的一部分,指定范围 | Range: bytes=500-999 |
If-Range | 客户端拥有某范围内资源的副本,它要对范围进行再验证。如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag或Date | If-Range: “737060cd8c284d8af7ad3082f209582d” |
If-Modified-Since | 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 | If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
If-Unmodified-Since | 只有实体在指定时间之后未被修改才请求成功 | If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
安全请求首部-Security
首部 | 描述 | 示例 |
---|---|---|
Authorization | 向服务器(401)回应自己的身份验证信息,HTTP授权的授权证书 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cookie | 客户端识别和跟踪的扩展首部 | Cookie: Skin=new; |
Cookie2 | 识别请求发起者能够理解哪种类型的Cookie | Cookie: $Version=1; Skin=new; |
代理请求首部-Proxy
首部 | 描述 | 示例 |
---|---|---|
Max-Forwards | 指定请求所经过的代理或其他中间节点的最大数目。只能和TRACE方法一同使用 | Max-Forwards: 10 |
Proxy-Authorization | 与代理进行认证时使用,响应Proxy-Authenticate质询 | Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Proxy-Connection | 客户端与代理之间建立连接使用。解决Connection被哑代理盲转发的问题 | Proxy-Connection: close |
响应首部(Response header)
响应的信息性首部-Informative
首部 | 描述 | 示例 |
---|---|---|
Age | (从原始服务器创建开始)响应持续时间,响应是通过中间节点,很可能从代理的缓存传过来的 | Age: 12 |
Retry-After | 如果资源不可用的话,告诉客户端什么时候(或多久之后)重新发送请求 | Retry-After: 120 |
Server | 服务器标识自己,同User-Agent标识客户端一样 | Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) |
Warning | 警告实体可能存在的问题 | Warning: 199 Miscellaneous warning |
协商首部-Negotiation
首部 | 描述 | 示例 |
---|---|---|
Accept-Ranges | 表明服务器是否接受请求资源的某个范围 | Accept-Ranges: bytes |
Allow | 告诉客户端可以对特定资源使用哪些HTTP方法,发送405Method Not Allowed响应的HTTP/1.1服务器必须包含Allow首部 | Allow: GET, HEAD |
Location | 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源 | Location: http://www.zcmhi.com/archives/94.html |
Vary | 是一个首部列表,服务器查看其它首部的列表,根据首部的内容挑出最适合的版本发送给客户端 | Vary: User-Agent |
安全响应首部-Security
首部 | 描述 | 示例 | |
---|---|---|---|
Proxy-Authenticate | 代理用这个首部来质询发送请求的应用程序,要求其对自身进行认证,HTTP/1.1代理服务器发送407Proxy Authentication Required响应,必须包含这个首部 | Proxy-Authenticate: Basic | |
WWW-Authenticate | 用于401Unauthorized 响应,向客户端发布一个质询认证方案,表明客户端请求实体应该使用的授权方案 | WWW-Authenticate: Basic | |
Set-Cookie | 不是真正的安全首部,但隐含有安全功能;可以在客户端设置一个令牌,以便服务器对客户端进行标识 | Set-Cookie: UserID=JohnDoe; | |
Set-Cookie2 | 是 | Set-Cookie的扩展 | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
实体首部(Entity header)
内容首部-Content
内容首部说明了实体内容的类型、尺寸以及处理它所需的其他有用信息
首部 | 描述 | 示例 |
---|---|---|
Content-Type | 请求或返回主体的媒体类型 | Content-Type: text/html; charset=utf-8 |
Content-Length | 请求或响应主体的长度或尺寸,比如HEAD方法得到服务器给的header就有这个首部 | Content-Length: 348 |
Content-Range | 在整个返回体中本部分的字节位置【206】 | Content-Range: bytes 21010-47021/47022 |
Content-Encoding | 是否对某对象进行过编码。比如,服务器告诉客户端它对对象执行过哪种编码,客户端就可以对报文解码 | Content-Encoding: compress, gzip |
Content-Language | 告诉客户端,理解哪种自然语言 | Content-Language: en,zh |
Content-Base | 服务器为响应主体部分中要解析的URL指定一个基础URL | Content-Base: http://www.joes-hardware.com |
Content-Location | 服务器用它将客户端重定向到一个新URL | Content-Location: http://www.joes-hardware.com/index.htm |
Content-MD5 | 对报文主体进行校验 | Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== |
实体缓存首部-Entity cache
首部 | 描述 | 示例 |
---|---|---|
ETag | 实体标记,某个特定资源版本的标识符 | ETag: “737060cd8c284d8af7ad3082f209582d” |
Expires | 给出响应失效的日期和时间,客户端缓存副本,在有效期之前,不去访问服务器资源是否有效 | Expires: Thu, 01 Dec 2010 16:00:00 GMT |
Last-Modified | 服务器上的资源的最后修改时间或创建时间 | Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT |
扩展首部(extension header)
首部 | 描述 | 示例 | |
---|---|---|---|
Cookie | 客户端识别和跟踪的扩展首部 | Cookie: Skin=new; | |
Cookie2 | 识别请求发起者能够理解哪种类型的Cookie | Cookie: $Version=1; Skin=new; | |
MIME-Version | 发送端使用的MIME版本 | MIME-Version: 1.0 | |
Set-Cookie | 不是真正的安全首部,但隐含有安全功能;可以在客户端设置一个令牌,以便服务器对客户端进行标识 | Set-Cookie: UserID=JohnDoe; | |
Set-Cookie2 | 是 | Set-Cookie的扩展 | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
UA-(CPU,Disp,OS,Color,Pixels) | 不推荐使用,客户端机器的CPU、显示器的尺寸和色彩深度、操作系统、显示器的颜色信息、显示器的像素信息 | UA-OS: Windows 95 | |
Content-Disposition | 告诉浏览器以下载的方式打开数据。 | ? | |
X-Frame-Options | HTTP响应首部,防止点击劫持攻击。 | X-Frame-Options: DENY、SAMEORIGIN(仅同源域名下的页面匹配许可) | |
X-XSS-Protection | HTTP响应首部,防止XSS攻击 | X-XSS-Protection: 0(过滤无效)、1(过滤有效) | |
DNT | HTTP请求首部,拒绝个人信息被收集 | DNT: 0(同意被追踪)、1(拒绝被追踪) | |
P3P | HTTP响应首部,保护用户隐私 | ? |
Hop-by-hop headers
HTTP首部字段根据代理怎么处理它们分为两类
End-to-end headers
端到端首部
分在此类别中的首部会转发给请求/响应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。
Hop-by-hop headers
逐跳首部
只对单次转发有效,会通过缓存或代理而不再转发。HTTP/1.1规定,使用Hop-by-hop 首部,需提供 Connection 首部字段。
逐跳首部
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- TE
- Trailer
- Transfer-Encoding
- Upgrade
除了这8个首部字段之外,其他所有字段都属于端到端首部。