第六章:HTTP首部

  1. HTTP 协议的请求和响应报文中必定包含 HTTP 首部。
  2. 请求报文由方法 、URI 、HTTP 版本 、HTTP 首部字段等部分构成。
    第六章:HTTP首部_第1张图片
  3. 响应报文由 HTTP 版本、状态码(数字和原因短语)、HTTP 首部字段 3 部分构成。
    第六章:HTTP首部_第2张图片
  4. HTTP 首部字段是构成 HTTP 报文的要素之一。结构:由首部字段名和字段值构成的中间用冒号“:” 分隔;若 HTTP 首部字段重复了会如何当 HTTP 报文首部中出现了两个或两个以上具有相同首部字段名时会怎么样?这种情况在规范内尚未明确,根据浏览器内部处理逻辑的不同,结果可能并不一致。
  5. 4 种 HTTP 首部字段类型:通用首部字段 , 请求首部字段, 响应首部字段,实体首部字段;
    第六章:HTTP首部_第3张图片
    请求首部字段:
    第六章:HTTP首部_第4张图片
    响应首部字段:
    第六章:HTTP首部_第5张图片
    实体首部字段:
    第六章:HTTP首部_第6张图片
  6. End-to-end (端到端)首部和 Hop-by-hop (逐跳)首部
    • 端到端首部:分在此类别中的首部会转发给请求 / 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。
    • 逐跳首部:分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1 和之后版本中,如果要使用 hop-by-hop 首部,需提供 Connection 首部字段。
  7. 通用首部字段:
    • 首部字段 Cache-Control 的指令,就能操作缓存的工作机制 :指定使用 public 指令时,则明确表明其他用户也可利用缓存。指定 private 指令后,响应只以特定的用户作为对象;使用 no-cache 指令的目的是为了防止从缓存中返回过期的资源。客户端发送的请求中如果包含 no-cache 指令,则表示客户端将不会接收缓存过的响应。于是,“中间”的缓存服务器必须把客户端请求转发给源服务器;当使用 no-store 指令 1 时,暗示请求(和对应的响应)或响应中包含机密信息; no-cache 代表不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源,no-store 才是真正地不进行缓存 ;s-maxage 指令的功能和 max-age 指令的相同,它们的不同点是 s-maxage 指令只适用于供多位用户使用的公共缓存服务器 ,当客户端发送的请求中包含 max-age 指令时,如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源。
      第六章:HTTP首部_第7张图片
      min-fresh 指令要求缓存服务器返回至少还未过指定时间的缓存资源。比如,**当指定 min-fresh 为 60 秒后,过了 60 秒的资源都无法作为响应返回了。**使用 max-stale 可指示缓存资源,即使过期也照常接收。如果指令未指定参数值,那么无论经过多久,客户端都会接收响应;如果指令中指定了具体数值,那么即使过期,只要仍处于 max-stale指定的时间内,仍旧会被客户端接收。
    1. Connection** 首部字段的作用:
    2. 控制不再转发给代理的首部字段;
      第六章:HTTP首部_第8张图片
    • 管理持久连接;
      第六章:HTTP首部_第9张图片
      注:HTTP/1.1 版本的默认连接都是持久连接。
      第六章:HTTP首部_第10张图片
      HTTP/1.1 之前的 HTTP 版本的默认连接都是非持久连接。如果想在旧版本的 HTTP 协议上维持持续连接,则需要指定Connection 首部字段的值为 Keep-Alive。
    • Date首部字段:首部字段 Date 表明创建 HTTP 报文的日期和时间。
    • Pragma :Pragma 是 HTTP/1.1 之前版本的历史遗留字段,仅作为与 HTTP/1.0的向后兼容而定义。
    • Trailer:首部字段 Trailer 会事先说明在报文主体后记录了哪些首部字段。
    • Transfer-Encoding : 首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式。HTTP/1.1 的传输编码方式仅对分块传输编码有效。
    • Upgrade : 首部字段 Upgrade 用于检测 HTTP 协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议;
    • Via :使用首部字段 Via 是为了追踪客户端与服务器之间的请求和响应报文的传输路径
    • Warning : 该首部通常会告知用户一些与缓存相关的问题的警告。
  8. 请求首部字段
    • Accept 通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级,若想要给显示的媒体类型增加优先级,则使用 q= 来额外表示权重值,权重值 q 的范围是 0~1,1最大,不指定权重 q 值时,默认权重为 q=1.0。
      第六章:HTTP首部_第11张图片
    • Accept-Charset Accept-Charset 首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序,可用权重 q 值来表示相对优先级;
    • Accept-Encoding Accept-Encoding 首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。可一次性指定多种内容编码。(常见的内容编码:gzip, compress, deflate, identity);
    • Accept-Language Accept-Language 用来告知服务器用户代理能够处理的自然语言集(指中文或英文等)
    • Authorization 用来告知服务器,用户代理的认证信息(证书值);
    • Expect 告知服务器,期望出现的某种特定行为;
    • Host 虚拟主机运行在同一个 IP 上,因此使用首部字段 Host 加以区分;
    • From 告知服务器使用用户代理的用户的电子邮件地址;
    • If-Match 附带条件请求,形如 If-xxx 这种样式的请求首部字段,都可称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
    • If-Modified-Since 如果在 If-Modified-Since 字段指定的日期时间后,资源发生了更新,服务器会接受请求;
    • If-Range 首部字段 If-Range 属于附带条件之一。它告知服务器若指定的 If-Range 字段值(ETag 值或者时间)和请求资源的 ETag 值或时间相一致时,则作为范围请求处理。反之,则返回全体资源;
    • Max-Forwards 该字段以十进制整数形式指定可经过的服务器最大数目。服务器在往下一个服务器转发请求之前,Max-Forwards 的值减 1 后重新赋值。当服务器接收到 Max-Forwards 值为 0 的请求时,则不再进行转发,而是直接返回响应;
    • Referer 首部字段 Referer 会告知服务器请求的原始资源的 URI;
    • User-Agent 创建请求的浏览器和用户代理名称等信息传达给服务器;
  9. 响应首部字段
    • Accept-Ranges 首部字段 Accept-Ranges 是用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。可指定的字段值有两种,可处理范围请求时指定其为 bytes,反之则指定其为 none。
    • Age 首部字段 Age 能告知客户端,源服务器在多久前创建了响应。字段值的单位为秒; 若创建该响应的服务器是缓存服务器,Age 值是指缓存后的响应再次发起认证到认证完成的时间值。代理创建响应时必须加上首部字段Age。
    • ETag 首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。
    • Location 首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置不同的资源; 基本上,该字段会配合 3xx :Redirection 的响应,提供重定向的URI。
    • Retry-After : 首部字段 Retry-After 告知客户端应该在多久之后再次发送请求。主要配合状态码 503 Service Unavailable 响应,或 3xx Redirect 响应一起使用。
    • Server 首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息;
    • WWW-Authenticate 首部字段 WWW-Authenticate 用于 HTTP 访问认证。
  10. 实体首部字段
    • Allow 首部字段 Allow 用于通知客户端能够支持 Request-URI 指定资源的所有 HTTP 方法;
    • Content-Encoding 告知客户端服务器对实体的主体部分选用的内容编码方式;
    • Content-Length 表明了实体主体部分的大小(单位是字节)
    • Content-Location 给出与报文主体部分相对应的 URI;
    • Content-MD5 首部字段 Content-MD5 是一串由 MD5 算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达;(采用这种方法,对内容上的偶发性改变是无从查证的,也无法检测出恶意篡改)
    • Content-Range 范围请求,告知客户端作为响应返回的实体的哪个部分符合范围请求;
    • Content-Type 说明了实体主体内对象的媒体类型;
    • Expires 将资源失效的日期告知客户端
    • Last-Modified 指明资源最终修改的时间;
  11. 为 Cookie 服务的首部字段
    原理: Cookie 的工作机制是用户识别及状态管理。
    标准: 网景通信公司设计并开发了 Cookie,并制定相关的规格标准。1994年前后,Cookie 正式应用在网景浏览器中。目前最为普及的 Cookie方式也是以此为基准的;
    首部字段:
    • Set-Cookie 开始状态管理所使用的Cookie信息(响应首部信息)
      当服务器准备开始管理客户端的状态时,会事先告知各种信息。
    • Cookie 服务器接收到的Cookie信息(请求首部信息)
  12. 其他首部字段
    HTTP 首部字段是可以自行扩展的。所以在 Web 服务器和浏览器的应用上,会出现各种非标准的首部字段。
    • X-Frame-Options 用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击;可指定的值: DENY拒绝, SAMEORIGIN同域名
    • DNT 其中 DNT 是 Do Not Track 的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。

你可能感兴趣的:(《图解HTTP》笔记)