正如标题所暗示的那样,我正在寻找有关伪/冒号标头字段用途的一些信息,即我想知道为什么我们有第二种类型的标头字段......
另外 - 我知道 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 不使用伪标头名称。