http 首部
报文首部
- 客户端和服务端处理时起关键作用的都在这里
- 其中包含 4 种 http 首部字段类型
通用首部字段
-
请求报文和响应报文两方都会使用的首部
-
Cache-Control: public
- 通过指定首部字段 Cache-Control 的指令,就能操作缓存的工作机制
-
Connection: Keep-Alive / close
- 控制不再转发给代理的首部字段
- 管理持久连接
-
Date: Tue, 03 Jul 2012 04:40:59 GMT
- 首部字段 Date 表明创建 HTTP 报文的日期和时间
-
Pragma: no-cache
- Pragma 是 HTTP/1.1 之前版本的历史遗留字段,仅作为与 HTTP/1.0 的向后兼容而定义
-
Trailer
- 首部字段 Trailer 会事先说明在报文主体后记录了哪些首部字段。该 首部字段可应用在 HTTP/1.1 版本分块传输编码时。
-
Transfer-Encoding: chunked Trailer: Expires ...(报文主体)... 0 Expires: Tue, 28 Sep 2004 23:59:59 GMT
-
Transfer-Encoding: chunked
- 首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码 方式。
-
Upgrade
- 首部字段 Upgrade 用于检测 HTTP 协议及其他协议是否可使用更高 的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。
- 还需要额外指定 Connection: Upgrade
- 升级为 websocket 也是该字段
-
Via
- 使用首部字段 Via 是为了追踪客户端与服务器之间的请求和响应报 文的传输路径
- 报文经过代理或网关时,会先在首部字段 Via 中附加该服务器的信 息,然后再进行转发。这个做法和 traceroute 及电子邮件的 Received 首 部的工作机制很类似
-
Warning: 113 gw.hackr.jp:8080 "Heuristic expiration" Tue, 03 Jul ⇒ 2012 05:09:44 GMT
- HTTP/1.1 的 Warning 首部是从 HTTP/1.0 的响应首部(Retry-After) 演变过来的。该首部通常会告知用户一些与缓存相关的问题的警告
请求首部字段
-
客户端向服务端发送请求的首部
-
Accept: text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8
-
文本文件
- 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 ...
-
-
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
- Accept-Charset 首部字段可用来通知服务器用户代理支持的字符集 及字符集的相对优先顺序
-
Accept-Encoding: gzip, deflate
-
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
-
Expect: 100-continue
- 客户端使用首部字段 Expect 来告知服务器,期望出现的某种特定 行为
-
From: info@hackr.jp
- 首部字段 From 用来告知服务器使用用户代理的用户的电子邮件地 址。
-
Host: www.hackr.jp
- 首部字段 Host 会告知服务器,请求的资源所处的互联网主机名和 端口号
-
If-Match: "123456"
- 形如 If-xxx 这种样式的请求首部字段,都可称为条件请求
-
If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT
- 而在指定 If-Modified-Since 字段值的日期时间之后,如果请求的资源都 没有过更新,则返回状态码 304 Not Modified 的响应
-
If-None-Match
- 只有在 If-None-Match 的字段值与 ETag 值不一致时,可处理该请求。 与 If-Match 首部字段的作用相反
-
If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT
- 它的作用的是告知服务器,指定的请求资源只有在字段值内指 定的日期时间之后,未发生更新的情况下,才能处理请求
-
If-Range
- 范围请求处理 时间不一致 直接返回全部资源
-
GET /index.html If-Range: "123456" Range: bytes=5001-10000 -
206 Partial Content Content-Range: bytes 5001-10000/10000 Content-Length: 5000
-
Max-Forwards: 10
- 通 过 TRACE 方 法 或 OPTIONS 方 法, 发 送 包 含 首 部 字 段 MaxForwards 的请求时,该字段以十进制整数形式指定可经过的服务器最大 数目
-
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5
- 接收到从代理服务器发来的认证质询时,客户端会发送包含首部字 段 Proxy-Authorization 的请求,以告知服务器认证所需要的信息
-
Range: bytes=5001-10000
- 范围请求
-
Referer: www.hackr.jp/index.htm
- 首部字段 Referer 会告知服务器请求的原始资源的 URI。
- 客户端一般都会发送 Referer 首部字段给服务器
-
TE: gzip, deflate;q=0.5
- 首部字段 TE 会告知服务器客户端能够处理响应的传输编码方式及 相对优先级。它和首部字段 Accept-Encoding 的功能很相像,但是用于 传输编码
- 首部字段 TE 除指定传输编码之外,还可以指定伴随 trailer 字段的 分块传输编码的方式。应用后者时,只需把 trailers 赋值给该字段值
- TE: trailers
-
User-Agent
- User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/⇒ 20100101 Firefox/13.0.1
- User-Agent 会将创建请求的浏览器和用户代理名称等信息 传达给服务器
响应首部字段
-
从服务器端向客户端返回响应报文时使用的首部。补充了响应的附 加内容,也会要求客户端附加额外的内容信息。
-
Accept-Ranges: bytes
- 首部字段 Accept-Ranges 是用来告知客户端服务器是否能处理范围 请求,以指定获取服务器端某个部分的资源。
-
Age: 600
- 首部字段 Age 能告知客户端,源服务器在多久前创建了响应。字段 值的单位为秒。
-
ETag: "82e22293907ce725faf67773957acd12"
- 首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符 串形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag 值。
- 资源被缓存时,就会被分配唯一性标识。例如,当使用中文版的浏 览器访问 http ://www.google.com/ 时,就会返回中文版对应的资源,而 使用英文版的浏览器访问时,则会返回英文版对应的资源。两者的 URI 是相同的,所以仅凭 URI 指定缓存的资源是相当困难的。若在下载过 程中出现连接中断、再连接的情况,都会依照 ETag 值来指定资源
- 强 ETag 值,不论实体发生多么细微的变化都会改变其值。
- 弱 ETag 值只用于提示资源是否相同。只有资源发生了根本改变,产 生差异时才会改变 ETag 值。
-
Location: www.usagidesign.jp/sample.html
- 使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置不同的资源
-
Proxy-Authenticate: Basic realm="Usagidesign Auth"
- 首部字段 Proxy-Authenticate 会把由代理服务器所要求的认证信息 发送给客户端
-
Retry-After: 120
- 首部字段 Retry-After 告知客户端应该在多久之后再次发送请求。
-
Server: Apache/2.2.17 (Unix)
- 首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用 程序的信息
-
Vary: Accept-Language
- 当代理服务器接收到带有 Vary 首部字段指定获取资源的请求时,如果使用 的 Accept-Language 字段的值相同,那么就直接从缓存返回响应。反之, 则需要先从源服务器端获取资源后才能作为响应返回
-
WWW-Authenticate: Basic realm="Usagidesign Auth"
- 首部字段 WWW-Authenticate 用于 HTTP 访问认证。它会告知客户 端适用于访问请求 URI 所指定资源的认证方案(Basic 或是 Digest)和 带参数提示的质询(challenge)
实体首部字段
-
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容 更新时间等与实体有关的信息。
-
Allow: GET, HEAD
- 首部字段 Allow 用于通知客户端能够支持 Request-URI 指定资源的 所有 HTTP 方法
-
Content-Encoding
- 首部字段 Content-Encoding 会告知客户端服务器对实体的主体部分 选用的内容编码方式。内容编码是指在不丢失实体信息的前提下所进行 的压缩
-
Content-Language: zh-CN
- 首部字段 Content-Language 会告知客户端,实体主体使用的自然语 言(指中文或英文等语言)。
-
Content-Length: 15000
- 首部字段 Content-Length 表明了实体主体部分的大小(单位是字 节)
-
Content-Location: www.hackr.jp/index-ja.ht…
- 首部字段 Content-Location 给出与报文主体部分相对应的 URI。
-
Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==
- 首部字段 Content-MD5 是一串由 MD5 算法生成的值,其目的在于 检查报文主体在传输过程中是否保持完整,以及确认传输到达。
-
Content-Type: text/html; charset=UTF-8
- 首部字段 Content-Type 说明了实体主体内对象的媒体类型。和首部 字段 Accept 一样,字段值用 type/subtype 形式赋值
-
Expires: Wed, 04 Jul 2012 08:26:05 GMT
- 首部字段 Expires 会将资源失效的日期告知客户端。缓存服务器在 接收到含有首部字段 Expires 的响应后,会以缓存来应答请求,在Expires 字段值指定的时间之前,响应的副本会一直被保存。当超过 指定的时间后,缓存服务器在请求发送过来时,会转向源服务器请求 资源
-
Last-Modified: Wed, 23 May 2012 09:59:55 GMT
- 首部字段 Last-Modified 指明资源最终修改的时间。
为 cookie 服务的首部字段
-
Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; ⇒ path=/; domain=.hackr.jp;
-
当服务器准备开始管理客户端的状态时,会事先告知各种信息。 下面的表格列举了 Set-Cookie 的字段值。
-
NAME=VALUE
- 赋予Cookie的名称和其值(必需项)
-
expires=DATE
- Cookie的有效期(若不明确指定则默认为浏览器关闭前为止)
-
path=PATH
- 将服务器上的文件目录作为Cookie的适用对象(若不指定则 默认为文档所在的文件目录)
-
domain=域名
- 作为Cookie适用对象的域名 (若不指定则默认为创建Cookie 的服务器的域名)
-
-
Cookie: status=enable
- 首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理 支持时,就会在请求中包含从服务器接收到的 Cookie。接收到多个 Cookie 时,同样可以以多个 Cookie 形式发送
其他首部字段
-
HTTP 首部字段是可以自行扩展的。所以在 Web 服务器和浏览器的 应用上,会出现各种非标准的首部字段
-
X-Frame-Options: DENY
- DENY :拒绝
- SAMEORIGIN :仅同源域名下的页面(Top-level-browsing-context) 匹配时许可。(比如,当指定 hackr.jp/sample.html 页面为 SAMEORIGIN 时,那么 hackr.jp 上所有页面的 frame 都被允许可 加载该页面,而 example.com 等其他域名的页面就不行了)
-
X-XSS-Protection:1
- 首部字段 X-XSS-Protection 属于 HTTP 响应首部,它是针对跨站脚 本攻击(XSS)的一种对策,用于控制浏览器 XSS 防护机制的开关。
- 0 :将 XSS 过滤设置成无效状态
- 1 :将 XSS 过滤设置成有效状态
-
DNT: 1
- 首部字段 DNT 属于 HTTP 请求首部,其中 DNT 是 Do Not Track 的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一 种方法
- 0 :同意被追踪
- 1 :拒绝被追踪
-
P3P: CP="CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa ⇒ IVAa IVDa OUR BUS IND UNI COM NAV INT"
- 首部字段 P3P 属于 HTTP 相应首部,通过利用 P3P(The Platform for Privacy Preferences,在线隐私偏好平台)技术,可以让 Web 网站上 的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的 目的
\