首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么HTTP/2使用伪标头字段?

为什么HTTP/2使用伪标头字段?
EN

Stack Overflow用户
提问于 2021-10-14 02:53:32
回答 2查看 791关注 0票数 0

来自RFC7540:

虽然HTTP/1.x使用消息起始行(参见RFC7230,第3.1节)来传递目标URI、请求方法和响应的状态代码,但HTTP/2使用了以':‘字符(ASCI0x3a)开头的特殊伪头字段。

那么为什么HTTP/2使用伪头字段呢?HTTP/1.x中的消息起始行有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-14 03:52:49

Google对HTTP/2的介绍借出一个图像

在这张图片中,您可以看到,在第一个请求中,前两个标题行通常如下:

代码语言:javascript
复制
GET /resoure HTTP/1.1
Host: https://example.com
...

现在被分割成这样的标题框架

代码语言:javascript
复制
:method: GET
:scheme: https
:host: example.com
:path: /resource
...

而其余的标题或多或少是相同的,除了是所有小写字符。

HTTP/2尽量减少有效负载大小。它还将压缩与前一个请求中发送的标头相等的标头和带头,如链接图像的右侧所示。

在HTTP/1.1中,一个连续的请求看起来像第一个初始请求,只是针对不同的资源:

代码语言:javascript
复制
GET /otherResource HTTP/1.1
Host: https://example.org
...

在HTTP/2中,对同一服务器的连续请求只需要

代码语言:javascript
复制
:path: /otherResource

由于所有其他标头都已可用,因此可以从以前缓存的和索引的标头中恢复。

因此,这是一个进一步减少连续请求的有效负载的优化。

票数 2
EN

Stack Overflow用户

发布于 2021-10-14 04:30:17

HTTP/2是一种新的协议,采用二进制编码。

HTTP/2中没有状态行,就像单个标头没有“行”一样。必须发明一种全新的方法来对HTTP请求的每个部分进行编码。

标题实际上是一种键->值结构。它没有为HTTP/1.1请求的第一行中出现的内容发明不同的编码,而是使协议更简单,如果使用相同的编码方法。

毕竟,像'path‘和'http方法’这样的东西已经在标题中了,为什么不采用与常规标头相同的编码方法呢?前面的:确保与现有的HTTP/1.1头没有冲突,因为头的名称永远不能包含:

因此tl;dr是:通过将来自HTTP请求和响应的第一行信息编码为特殊的HTTP报头,协议可能会更简单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69564548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档