http 首部

119 阅读10分钟

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 网站上 的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的 目的

\