伪/冒号标头字段的用途



正如标题所暗示的那样,我正在寻找有关伪/冒号标头字段用途的一些信息,即我想知道为什么我们有第二种类型的标头字段......

另外 - 我知道 http2 中使用伪/冒号标头字段代替消息和状态行(^^^我不知道的原因^^^); 但是 http1 中的伪/冒号标头字段是否用于中继不同的信息(来自状态和请求)?

伪标头字段的目的是统一请求/响应信息在SPDY和后来的HTTP/2(基于SPDY)中传输的方式。

当SPDY被设计(以及HTTP/2)时,需要传输以不同方式格式化的请求或响应信息。

HTTP标头是(键,值)对,这很容易。

但是,有HTTP方法的概念。这恰好是请求行的第一个标记,因此它不是元组;它的键由它的位置(第一个令牌)定义,其值是构成第一个令牌的请求行上存在的实际字符。

请求目标和 HTTP 版本也是如此:它们是请求行的第二个和第三个标记。

因此,从概念上讲,HTTP 请求可以这样用对表示,例如:

(method, GET)  
(target, /)  
(version, HTTP/1.1)  
(Connection, close)  
(Accept, *)  
但是,"方法"、"目标"和"版本"不能用作普通的HTTP标头,

因为它们从未被HTTP规范保留为标准HTTP标头名称,人们可以将它们用作自定义HTTP标头名称(想象一下使用"版本"标头的REST API)。

HTTP/2 需要一种方法来以同构的方式将这些对作为对承载,因为这会简化(很多)协议。

因此,为请求和响应行携带的额外信息引入了特殊名称。这些额外的信息在 HTTP/1.1 中是位置的,但在 HTTP/2 中是普通的对,这使得 HTTP/2 在这方面更加同质:它只携带对。如此之多,以至于携带请求和响应信息的HTTP/2帧是相同的,它只是称为HEADERS。

选择以冒号开头的伪标头名称,因为这将是 HTTP/1.1 中标头名称的非法字符。HTTP/1.1 不使用伪标头名称。

相关内容

  • 没有找到相关文章

最新更新