HTTP 音讯

HTTP 音讯是服务器和客户端之间交换数据的办法。有两种类型的音讯:恳求(request)——由客户端发送用来触发一个服务器上的动作;呼应(response)——来自服务器的应对。

HTTP 音讯由采用 ASCII 编码的多行文本构成。在 HTTP/1.1 及前期版别中,这些音讯通过衔接公开地发送。在 HTTP/2 中,为了优化和功能方面的改进,曾经可人工阅读的音讯被分到多个 HTTP 帧中。

Web 开发人员或网站管理员,很少自己手艺创立这些原始的 HTTP 音讯:由软件、浏览器、代理或服务器完结。他们通过配置文件(用于代理服务器或服务器),API(用于浏览器)或其他接口提供 HTTP 音讯。

跟我一起探索HTTP-HTTP 消息

HTTP/2 二进制结构机制被设计为不需要改动任何 API 或配置文件即可运用:它大体上对用户是通明的。

HTTP 恳求和呼应具有类似的结构,由以下部分组成:

  1. 一行起始行用于描绘要履行的恳求,或许是对应的状况,成功或失败。这个起始行总是单行的。
  2. 一个可选的 HTTP 标头集合指明恳求或描绘音讯主体(body)。
  3. 一个空行指示一切关于恳求的元数据现已发送结束。
  4. 一个可选的包括恳求相关数据的主体(比如 HTML 表单内容),或许呼应相关的文档。主体的巨细有起始行的 HTTP 头来指定。

起始行和 HTTP 音讯中的 HTTP 头统称为恳求头,而其有用负载被称为音讯主体。

跟我一起探索HTTP-HTTP 消息

HTTP 恳求

起始行

HTTP 恳求是由客户端宣布的音讯,用来使服务器履行动作。起始行(start-line)包括三个元素:

  1. 一个 HTTP 办法,一个动词(像 GETPUT 或许 POST)或许一个名词(像 HEAD 或许 OPTIONS),描绘要履行的动作。例如,GET 表明要获取资源,POST 表明向服务器推送数据(创立或修改资源,或许发生要回来的临时文件)。

  2. 求方针(request target),通常是一个 URL,或许是协议、端口和域名的肯定路径,通常以恳求的环境为特征。恳求的格局因不同的 HTTP 办法而异。它能够是:

    一个肯定路径,末尾跟上一个 '?' 和查询字符串。这是最常见的方式,称为原始方式(origin form),被 GETPOSTHEADOPTIONS 办法所运用。

    • POST / HTTP/1.1

    • GET /background.png HTTP/1.0

    • HEAD /test.html?query=alibaba HTTP/1.1

    • OPTIONS /anypage.html HTTP/1.0

    • 一个完整的 URL,被称为肯定方式(absolute form),主要在运用 GET 办法衔接到代理时运用。GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1

    • 由域名和可选端口(以 ':' 为前缀)组成的 URL 的 authority 部分,称为 authority form。仅在运用 CONNECT 树立 HTTP 隧道时才运用。CONNECT developer.mozilla.org:80 HTTP/1.1

    • 星号方式(asterisk form),一个简略的星号('*'),合作 OPTIONS 办法运用,代表整个服务器。OPTIONS * HTTP/1.1

  3. HTTP 版别(HTTP version),界说了剩余音讯的结构,作为对希望的呼应版别的指示符。

标头(Header)

来自恳求的 HTTP 标头遵从和 HTTP 标头相同的根本结构:不区别巨细写的字符串,紧跟着的冒号(':')和一个结构取决于标头的值。整个标头(包括值)由一行组成,这一行能够相当长。

有许多恳求标头可用,它们能够分为几组:

  • 通用标头(General header),例如 Via,适用于整个音讯。
  • 恳求标头(Request header),例如 User-AgentAccept-Type,通过进一步的界说(例如 Accept-Language)、给定上下文(例如 Referer)或许进行有条件的约束(例如 If-None)来修改恳求。
  • 表明标头(Representation header),例如 Content-Type 描绘了音讯数据的原始格局和运用的恣意编码(仅在音讯有主体时才存在)。

跟我一起探索HTTP-HTTP 消息

主体(Body)

恳求的最终一部分是它的主体。不是一切的恳求都有一个主体:例如获取资源的恳求,像 GETHEADDELETEOPTIONS,通常它们不需要主体。有些恳求将数据发送到服务器以便更新数据:常见的的情况是 POST 恳求(包括 HTML 表单数据)。

主体大致可分为两类:

  • 单一资源(Single-resource)主体,由一个单文件组成。该类型的主体由两个标头界说:Content-TypeContent-Length
  • 多资源(Multiple-resource)主体,由多部分主体组成,每一部分包括不同的信息位。通常是和 HTML 表单连系在一起。

HTTP 呼应

状况行

HTTP 呼应的起始行被称作状况行(status line),包括以下信息:

  1. 协议版别,通常为 HTTP/1.1
  2. 状况码(status code),表明恳求是成功或失败。常见的状况码是 200404302
  3. 状况文本(status text)。一个简略的,纯粹的信息,通过状况码的文本描绘,帮助人们理解该 HTTP 音讯。

一个典型的状况行看起来像这样:HTTP/1.1 404 Not Found

标头(Header)

呼应的 HTTP 标头遵从和任何其他标头相同的结构:不区别巨细写的字符串,紧跟着的冒号(':')和一个结构取决于标头类型的值。整个标头(包括其值)表现为单行方式。

许多不同的标头可能会出现在呼应中。这些能够分为几组:

  • 通用标头(General header),例如 Via,适用于整个音讯。
  • 呼应标头(Response header),例如 VaryAccept-Ranges,提供有关服务器的其他信息,这些信息不适合状况行。
  • 表明标头(Representation header),例如 Content-Type 描绘了音讯数据的原始格局和运用的恣意编码(仅在音讯有主体时才存在)。

跟我一起探索HTTP-HTTP 消息

主体(Body)

呼应的最终一部分是主体。不是一切的呼应都有主体:具有状况码(如 201204)的呼应,通常不会有主体。

主体大致可分为三类:

  • 单资源(Single-resource)主体,由已知长度的单个文件组成。该类型主体由两个标头界说:Content-TypeContent-Length
  • 单资源(Single-resource)主体,由未知长度的单个文件组成。通过将 Transfer-Encoding 设置为 chunked 来运用分块编码。
  • 多资源(Multiple-resource)主体,由多部分 body 组成,每部分包括不同的信息段。但这是比较少见的。

HTTP/2 帧

HTTP/1.x 音讯有一些功能上的缺陷:

  • 与主体不同,标头不会被压缩。
  • 两个音讯之间的标头通常非常类似,但它们仍然在衔接中重复传输。
  • 无法多路复用。当在同一个服务器翻开几个衔接时:TCP 热衔接比冷衔接愈加有用。

HTTP/2 引入了一个额定的进程:它将 HTTP/1.x 音讯分成帧并嵌入到流(stream)中。数据帧和报头帧别离,这将允许报头压缩。将多个流组合,这是一个被称为多路复用(multiplexing)的进程,它允许更有用的底层 TCP 衔接。

跟我一起探索HTTP-HTTP 消息

HTTP 帧现在对 Web 开发人员是通明的。在 HTTP/2 中,这是一个在 HTTP/1.1 和底层传输协议之间附加的进程。Web 开发人员不需要在其运用的 API 中做任何更改来运用 HTTP 帧;当浏览器和服务器都可用时,HTTP/2 将被翻开并运用。

结论

HTTP 音讯是运用 HTTP 的关键;它们的结构简略,而且具有高可扩展性。HTTP/2 帧机制是在 HTTP/1.x 语法和底层传输协议之间增加了一个新的中间层,而没有从根本上修改它,即它是树立在通过验证的机制之上。