正如标题所示,我正在寻找有关伪/冒号标题字段目的的一些信息,即我想知道为什么我们有第二种类型的标题字段......
另外 - 我知道在http2中使用伪/冒号头字段代替消息和状态行(^^^我不知道的原因^^^);但是http1中使用伪/冒号头字段来传递不同的信息(来自状态和请求)?
答案 0 :(得分:16)
伪标头字段的目的是统一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标头名称(想象一下使用"版本&#34的REST API;头)。
HTTP / 2需要一种以同类方式传输这些对的方法,因为这会简化(很多)协议。因此,为请求和响应行所携带的额外信息引入了特殊名称。这些额外的信息在HTTP / 1.1中是位置的,但在HTTP / 2中是一个正常的对,使HTTP / 2在这方面更加同质:它只是携带对。 这么多,携带请求和响应信息的HTTP / 2帧是相同的,它只是被称为HEADERS。
伪标题名称选择以冒号开头,因为这将是HTTP / 1.1中标题名称的非法字符。 HTTP / 1.1不使用伪标题名称。