美文网首页
《图解HTTP》学习记录五(报文首部字段①)

《图解HTTP》学习记录五(报文首部字段①)

作者: Iswine | 来源:发表于2016-10-16 19:13 被阅读0次

    报文分为请求报文与响应报文,除开报文实体的差异之外,两者的报文首部内容上也不尽相同。下图是访问www.baidu.com的报文首部截图:

    可见,请求报文首部第一行是由“请求方法+协议及其版本”组成的请求行,响应报文首部的第一行则是“状态码+协议及其版本组成的”状态行。此外,包含各种首部字段的HTTP首部字段行也是有差别的,一般将HTTP首部字段语句分为:通用首部字段、请求首部字段、响应首部字段、实体首部字段。所有的字段格式都是“key:value”这种形式,如果value值有多个,中间用逗号隔开。接下来,来具体介绍首部字段的各种属性值:

    通用首部字段

    即,响应报文和请求报文中均可以存在的首部字段,具体包括:
    1.Cache-Control
    用以操纵缓存的工作机制,虽为通用首部字段,但其参数指令在请求报文首部与响应报文首部略有不同:

    • pubulic/private:这是两个只存在于响应报文之中的功能相反的指令,pubulic代表可向任意方提供缓存,而private只能向特定用户提供缓存。
    • no-cache:防止从缓存中获取过期资源。
      若请求中包含该指令:则表示客户端不会接收缓存过的响应,缓存服务器会将请求直接转发给源服务器;
      若响应中包含该指令:缓存服务器则不能对资源进行缓存,且源服务器将不再对缓存服务器中提出的请求进行有效性确认,禁止其进行缓存操作。
    • no-store:暗示请求或响应中包含机密内容,禁止缓存。实际上该指令比no-cache更加强硬,是真正的禁止缓存。
    • no-transform:规定缓存不能改变实体主体的媒体类型。
    • max-age:形如Cache-Control:max-age:60000,其中的数字单位为秒。
      若请求中包含该指令:表示缓存的时间若比该时间小,则加载缓存。故当max-age的值为0时,缓存服务器会直接将请求转发给源服务器。
      若响应中包含该指令:缓存服务器将不再对资源的有效性进行确认,以max-age的数值来代表资源保存的最长缓存时间,其优先级是高于Expires的;
    • min-fresh:形如Cache-Control:min-fresh:60000,其中的数字单位为秒。表示过了XX秒后的资源都无法作为缓存返回。
    • max-stale:形如Cache -Control:max-stale:60000,其中的数字单位为秒。表示只要处于max-stale的时间范围内,无论缓存是否过期都会照常接收。若无值,则表示无限期接收缓存。
      PS:min-freshmax-stale构成了非常规处理缓存的上下限。
    • must-revalidate:代理会向源服务器再次验证即将返回的响应缓存是否有效,这是最高优先级的指令,会自动忽略max-stale

    2.Conection
    两个作用,其一是控制不再转发的首部字段名;其二是管理持久连接。

    • 控制不再转发的首部字段名

      转自《图解HTTP》
      如图所示,Connection:upgrade控制了名为Upgrade的首部字段,只让代理服务其接收该字段,代理转发过程中删除了有关Upgrade的语句。
    • 管理持久连接
      共有两个参数:close/keep-alive,前者表示断开连接,后者表示保持持久连接。

    3.Data
    表示该HTTP报文所创立的日期与时间。

    4.Trailer
    事先说明在报文主体后记录了哪些首部字段。

    5.Transfer-Encodding
    规定了传输报文主体时采用何种编码形式。

    6.Upgrade
    用以检测HTTP协议及其它协议是否可使用更高版本进行通信,其参数可以指定一个完全不同的通信协议,如:Upgrade: TSL/1.0,HTTP/1.1

    7.Via
    用于记录经过代理服务器的转发情况,常与Trace方法一块使用。

    8.Warning
    警告!

    请求报文首部字段

    请求报文首部字段意为只有请求报文特有的,只会出现在请求报文中的首部字段。用于补充请求的附加信息,客户端信息 以及对响应内容的优先级等等。
    1.Accept
    Accept字段可以告知服务器,用户代理能够处理的媒体类型及其优先级,可用type/subtype的这种形式来一次指定多个媒体类型,如:

    • 文本文件
      text/html,text/js,text/css
      application/xhtml+xml,application/xml
    • 图片文件
      image/gif,image/jpeg,image/png
    • 视频文件
      video/mpegvideo/quicktime
    • 二进制文件
      application/octec-stream,application/zip

    若想要给显示的媒体类型添加优先级,则使用 q=(0~1)来表示权重值,当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。

    2.Accept-Charset/Accept-Encoding/Accept-Language
    这三个分别表示通知服务器用户代理所能支持的字符集/编码类型/以及支持的语言。同样的他们也能用q=(0~1)来表示优先级。

    3.Authorization
    告知服务器,用户代理的认证登录信息,是服务器返回401状态码用户登录后,给请求添加的登录信息,现在基本上不会使用这种方法。

    4.From
    来告知服务器用户的邮箱,仅仅是留下一个联系方式。

    5.Host
    它将告知服务器,请求的资源所处的互联网主机名和端口号,Host首部字段是HTTP/1.1规范中唯一一个必须包含在请求首部内的首部字段。由于一个IP地址下可能存在多个域名,所以需要Host来告诉服务器具体请求的是哪个资源。

    6.Range
    范围请求,告知服务器索取资源的范围。如:Range: bytes = 5000-10000意为请求获取从第5000个字节到10000个字节的资源。若获取成功,会抛出206,返回范围资源;失败,则抛出200,返回所有资源。

    7.If-Match/If-Modified-Since/If-None-Match/If-Range/If-Unmodified-Since
    形如If-xxx的这种请求首部字段称为条件请求,意为服务器只有满足条件请求的内容,才会执行请求。

    • If-Match:只有它的值与想要获取资源的实体标记(Etag)值相等时,服务器才会返回资源。
    • If-Modified-Since:如果在该字段指定的时间早于资源更新时间,则处理该请求。反之,则抛出304,使用缓存即可。
    • If-Range:范围请求,与Range字段一同使用。如果其值与实体标记(Etag)值相等,则返回指定的范围资源。若不等,则抛出200,返回所有资源。
    • If-None-Match/If-Unmodified-SinceIf-Match/If-Modified-Since否定方法。

    8.Max-Forwards:通过TRACE方法或OPTIONS方法时,发送包含字段请求时,将以十进制形式指定经过服务器的最大数目。例如:Max-Forwards:3,规定经过服务器数目为3,没经过一个服务器其值将会-1,当其值为0时,所在服务器强制返回响应。

    9.Refer
    告知服务器请求原始资源的URL,出于安全性考虑也可以考虑不发送该字段。

    10.TE
    告知服务器客户端能够处理的传输编码方式及其优先级,他与Accept-Encoding很像,但仅用于传输编码。

    11.User-Agent:该字段会将创建请求的浏览器及用户代理等信息传达个服务器。

    相关文章

      网友评论

          本文标题:《图解HTTP》学习记录五(报文首部字段①)

          本文链接:https://www.haomeiwen.com/subject/vkuoyttx.html