带你一步步解析 HTTP( 七 )

  • Content-Language 实体报头描述了客户端或者服务端能够接受的语言,例如
  • Content-Language: de-DEContent-Language: en-USContent-Language: de-DE, en-CA
    • Content-Encoding 这又是一个比较麻烦的属性,这个实体报头用来压缩媒体类型 。Content-Encoding 指示对实体应用了何种编码 。常见的内容编码有这几种: gzip、compress、deflate、identity ,这个属性可以应用在请求报文和响应报文中
    Accept-Encoding: gzip, deflate //请求头Content-Encoding: gzip//响应头下面是一些实体标头字段
    带你一步步解析 HTTP

    文章插图
     
    请求标头上面给出的例子请求报文的属性比较少,下面给出一个 MDN 官网的例子
    GET /home.html HTTP/1.1Host: developer.mozilla.orgUser-Agent: Mozilla/5.0 (macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflate, brReferer: https://developer.mozilla.org/testpage.htmlConnection: keep-aliveUpgrade-Insecure-Requests: 1If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMTIf-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"Cache-Control: max-age=0 Host
    Host 请求头指明了服务器的域名(对于虚拟主机来说),以及(可选的)服务器监听的TCP端口号 。如果没有给定端口号,会自动使用被请求服务的默认端口(比如请求一个 HTTP 的 URL 会自动使用80作为端口) 。
    Host: developer.mozilla.org上面的 Accpet、 Accept-Language、Accept-Encoding 都是属于内容协商的请求标头,我们会在下面说明
    Referer
    HTTP Referer 属性是请求标头的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理 。
    Referer: https://developer.mozilla.org/testpage.htmlUpgrade-Insecure-Requests
    Upgrade-Insecure-Requests 是一个请求标头,用来向服务器端发送信号,表示客户端优先选择加密及带有身份验证的响应 。
    Upgrade-Insecure-Requests: 1If-Modified-Since
    HTTP 的 If-Modified-Since 使其成为条件请求:
    • 返回200,只有在给定日期的最后一次修改资源后,服务器才会以200状态发送回请求的资源 。
    • 如果请求从开始以来没有被修改过,响应会返回304并且没有任何响应体
    If-Modified-Since 通常会与 If-None-Match 搭配使用,If-Modified-Since 用于确认代理或客户端拥有的本地资源的有效性 。获取资源的更新日期时间,可通过确认首部字段 Last-Modified 来确定 。
    大白话说就是如果在 Last-Modified 之后更新了服务器资源,那么服务器会响应200,如果在 Last-Modified 之后没有更新过资源,则返回 304 。
    If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMTIf-None-Match
    If-None-Match HTTP请求标头使请求成为条件请求 。对于 GET 和 HEAD 方法,仅当服务器没有与给定资源匹配的 ETag 时,服务器才会以200状态发送回请求的资源 。对于其他方法,仅当最终现有资源的ETag与列出的任何值都不匹配时,才会处理请求 。
    If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"ETag 属于响应标头,后面进行介绍 。
    内容协商内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源 。内容协商会以响应资源的语言、字符集、编码方式等作为判断的标准 。
    带你一步步解析 HTTP

    文章插图
     
    内容协商主要有以下3种类型:
    • 服务器驱动协商(Server-driven Negotiation)
    这种协商方式是由服务器端进行内容协商 。服务器端会根据请求首部字段进行自动处理
    • 客户端驱动协商(Agent-driven Negotiation)
    这种协商方式是由客户端来进行内容协商 。
    • 透明协商(Transparent Negotiation)
    是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法 。
    内容协商的分类有很多种,主要的几种类型是 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language 。
    Accept
    接受请求 HTTP 标头会通告客户端其能够理解的 MIME 类型
    那么什么是 MIME 类型呢?在回答这个问题前你应该先了解一下什么是 MIME
    MIME: MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准 。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据 。


    推荐阅读