如标题所示,我正在寻找关于伪/冒号标题字段的一些信息,也就是说,我想知道为什么我们有第二种类型的头字段.
另外-我知道在http2中使用伪/冒号标题字段来代替消息和状态行(^,原因我不知道^);但是http1中是否使用伪/冒号头字段来中继不同的信息(来自状态和请求)?
发布于 2015-06-17 20:45:20
伪标头字段的目的是统一在SPDY和HTTP/2 (基于SPDY的HTTP/2中)中传递请求/响应信息的方式。
在设计SPDY (但也包括HTTP/2)时,需要传输以不同方式格式化的请求或响应信息。
HTTP头是(键、值)对,这很容易。
但是,存在HTTP方法的概念。这恰好是请求行的第一个令牌,所以它不是元组;它的键是由它的位置(第一个令牌)定义的,它的值是构成第一个令牌的请求行上的实际字符。
请求目标和HTTP版本也是如此:它们是请求行的第二个和第三个令牌。
因此,从概念上讲,HTTP请求可以用这种方式用对表示,例如:
(method, GET)
(target, /)
(version, HTTP/1.1)
(Connection, close)
(Accept, *) 但是,“方法”、“目标”和“版本”不能用作普通HTTP报头,因为HTTP规范从未将它们保留为标准HTTP标头名称,而且人们可以使用它们作为自定义HTTP头名(假设REST使用"version“报头)。
HTTP/2需要一种方法来以一种同构的方式携带这些对,作为对,因为这样可以简化(很多)协议。
因此,对请求和响应行所携带的额外信息采用特殊名称。这些额外的信息在HTTP/1.1中是位置的,但在HTTP/2中是一个正常的对,这使得HTTP/2在这方面更加同质:它只包含对。因此,包含请求和响应信息的HTTP/2框架是相同的,它被称为标头。
选择以冒号开头的伪标头名称,因为这将是HTTP/1.1中标头名称的非法字符。HTTP/1.1不使用伪标头名称。
https://stackoverflow.com/questions/30900008
复制相似问题