HTTP首部

Posted tlxf-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP首部相关的知识,希望对你有一定的参考价值。

1、报文首部

   技术图片

  HTTP协议的请求和响应必定包含HTTP首部,它包括了客户端和服务端分别处理请求和响应提供所需要的信息。报文主体字儿是所需要的用户和资源的信息都在这边。 

  HTTP请求报文组成

         方法,URL,HTTP版本,HTTP首部字段

  技术图片

  HTTP响应报文组成

         HTTP版本,状态码(数字和原因短语),HTTP首部字段

  技术图片

2、HTTP首部字段

  2.1  首部介绍

  HTTP首部信息传递了重要的信息,是构成HTTP报文的要素。

  技术图片

  2.2 HTTP首部字段结构

  首部字段结构

         首部字段名:字段值

  另外,字段值对应单个HTTP首部字段可以有多个值,中间用逗号间隔。如

        Keep-Alive: timeout=15,max=100

  2.3 HTTP的4种首部字段类型

    通用首部字段:请求报文和响应报文两方都会使用的首部;

    请求首部字段:从客户端到服务端发送的请求报文时使用的首部。补充了请求的附加内容,客户端信息、响应内容相关优先级信息;

    响应首部字段:从服务端到客户端发送的响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息;

    实体首部字段:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等于实体相关的信息。

   技术图片   

   请求首部字段

  技术图片

  响应首部字段

  技术图片

  技术图片

  2.4 其他首部字段

  端到端首部(end-to-end Header)

         分在此类别中的首部会转发请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。

  逐跳首部(Hop-by-hop Header)

         分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。逐跳首部字段只对concention,keep-alive,proxy-authenticate,proxy-authorization,trailer,te,transfer-encoding、upgrade这8个首部字段有效,其他的字段都为端到端首部。

3、HTTP通用首部字段

  3.1 cache-control 

  技术图片     技术图片

 

  Cache-Control: 是否能缓存的指令

  3.1.1   public、private

  Cache-Control :public:其他用户也可利用缓存;

  Cache-Control :private:响应只以特定的用户作为对象;缓存服务器只会对特定用户提供缓存服务,其他用户则不会。

  技术图片

  3.1.2 no-cache 

  Cache-Control :no-cache:为防止从缓存中返回过期的资源,

  当请求首部中包含no-cache时则表示客户端将不会接收缓存过的响应,于是,中间的缓存服务器会把客户端请求转发给源服务器。

  当响应首部中包含no-cache时则表示缓存服务器不对资源进行缓存。源服务器以后也将不再对缓存服务器请求中的资源进行有效性确认且禁止对其响应资源进行缓存操作。

  Cache-Control :no-cache=Location

       无参数值的首部字段可以使用缓存,有参数值不使用缓存,指定首部字段具体值的方式,只能在响应指令中指定。

  3.1.3 no-store

  Cache-Control:no-store  控制可执行缓存的对象指令,使用该指令,暗示请求和响应中包含机密信息

       no-cache:不缓存过期资源

       no-store:不在本地存储请求和响应的任一部分

  3.1.4 s-maxage

  指定缓存期限和认证的指令

  Cache-Control: s-maxage=604800(单位:秒)

  s-maxage与max-age指令相同,但是不同点是s-maxage指令只适用于供多位用户使用的公共缓存服务器(一般为代理),也可以说对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。同时,使用此字段后,expires和max-age字段无效。

  3.1.5 max-age

  资源保存为缓存的最长时间 

  Cache-Control: max-age=604800(单位:秒)

       客户端请求包含该字段:如果请求的资源的缓存时间数值比指定时间数值小,则客户端直接接受缓存的资源,当max-age为0时,那么缓存服务器把请求转发给源服务器。

       服务器返回包含该字段:缓存服务器将不对资源进行有效性在确认。

  HTTP/1.1: max-age优先处理,expires忽略;

  HTTP/1.0: expires优先处理,max-age忽略。

  3.1.6 min-fresh

  要求缓存服务器返回至少还未过指定时间的缓存资源

  Cache-Control: min-fresh=60(单位:秒)

  当指定min-fresh为60秒过后,过了60秒的资源都无法作为响应返回。

  3.1.7 max-stale:表示缓存资源,即使过期也照样接收

  Cache-Control: max-stale =60(单位:秒)

  max-stale未指定参数值,则表示无论经过多久,客户端都会接收响应;如果指定了具体参数值,那么即使过期,只要仍处于max-stale指定时间内,仍旧会被客户端接收。

  3.1.8 only-if-cached 

  Cache-Control: only-if-cached

  表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。或者说,如果请求资源缓存服务器上存在,则永远不再重新加载响应,也不会确定资源有效性,如果不存在,则返回状态码504 gateway timeout。

  3.1.9 must-revalidate

  代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效

  Cache-Control: must-revalidate

  如果代理无法连通源服务器,则返回504 gateway timeout。

  并且must-revalidate与max-stale冲突,must-revalidate使max-stale无效。

  3.1.10 proxy-revalidate

  要求所有的缓存服务器在接收客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性

    Cache-Control: proxy-revalidate

  3.1.11 no-transform

  无论在请求还是响应中,缓存都不能改变实体主体的媒体类型,主要为了防止缓存或代理压缩图片等操作。

  Cache-Control: no-transform

  3.2  connection

  作用:控制不在转发给代理的首部字段和管理持久连接。

  技术图片    技术图片

  

  技术图片     技术图片

  3.3  date 

  三种表示格式,主要是协议版本不同。

  技术图片

  技术图片

  3.4  Prame

  HTTP/1.1之前版本遗留字段,向后兼容,Parame:no-cache,为通用首部字段,只用于客户端发送的请求中。客户端要求所有中间服务器不返回缓存的资源。通常情况下Parame:no-cache和Cache-Control :no-cache都在请求中包含。

  技术图片

  技术图片

  3.5 trailer

  此字段会事先说明在报文主体后记录了哪些首部字段,该首部字段可应用在HTTP/1,1版本分块传输编码时。

  技术图片

  技术图片

  技术图片

   技术图片

  3.6   transfer-encoding 

  传输报文主体时采用的编码方式。HTTP/1.1的传输编码方式仅对分块传输编码有效。

  技术图片

  技术图片

  技术图片

  3.7 upgrade

  此字段只能作用于相邻服务器之间,如果相邻服务器则表示监测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。

  如果不是相邻服务器则体现了connection的另一个作用:控制不在转发给代理的首部字段

   技术图片

  3.8 via

    此字段用于追踪客户端和服务端之间的请求和响应报文的传输路径。

  技术图片

  Via :首部是为了追踪传输路径,所以经常会在TRACE方法一起使用。

  3.9 warning

  HTTP/1.0:Retry-After →→→→HTTP/1.1:Warning

  Warning:【警告码】【警告主机:端口号】【警告内容】【日期时间】

  技术图片

以上是关于HTTP首部的主要内容,如果未能解决你的问题,请参考以下文章

读《图解HTTP》有感-(HTTP首部)

HTTP协议图--HTTP 报文首部之首部字段(重点分析)

HTTP 报文 之 HTTP 首部

fiddler——http——header首部(请求首部和响应首部)

HTTP首部

HTTP首部都有哪些字段?