HTTP 2:会话范围查询

时间:2018-09-19 09:29:44

标签: http2

很抱歉,我认为这可能是一个愚蠢的问题,但是:

我对HTTP 2的理解是,您可以创建一个连接,如果需要的话可以建立TLS,然后升级到2,并对那个连接进行很多小的查询:之所以能够提高速度,是因为您没有重新建立连接和TLS。

如果为true,则涉及会话时-连接上的每个请求均被视为唯一请求和:。有cookie和标头,还是它们都被视为原始请求的子请求?

这是否会影响代理是否可以将来自客户端的请求合并到单个流中?

1 个答案:

答案 0 :(得分:1)

  

我对HTTP 2的理解是创建一个连接,如果需要的话建立TLS,然后升级到2

不完全是。如果您使用TLS,则将使用HTTP / 2作为TLS协商的一部分进行协商。如果您不使用TLS,则可以升级,但浏览器仅支持基于HTTPS的HTTP / 2,因此是大多数用例。

  

当涉及会话时-连接上的每个请求都被视为唯一请求和:。有cookie和标头,还是它们都被视为原始请求的子请求?

每个请求都是HTTP / 2中称为的一部分。这是一个独特的请求,它具有自己的Cookie和标头,并且与先前的请求无关(尽管请注意以下注意事项)。从概念上讲,HTTP / 1.1允许您在一个连接上发送多个唯一的,不相关的请求,这一点实际上没有什么不同,但是与HTTP / 1.1不同,由于{{ 3}}。

此图可能有助于解释它:multiplexing

  

这是否会影响代理是否可以将来自客户端的请求合并到单个流中?

我不确定您的意思吗?


注意:虽然HTTP / 2请求彼此独立并且HTTP在较高级别上仍然是无状态的,但是当您移至较低级别时,有一些地方可能会挑战其严格措辞,并且在技术上有些地方请求之间的连接。例如:

  • HTTP / 2实际上使用HPACK报头压缩来压缩HTTP报头,因此,如果在不同的请求(例如,相同的cookie)上发送同一报头两次,则第二个调用将包含对先前接收到的报头的引用,而不是重复数据。
  • 每个请求都有一个唯一的流ID,它是一个递增的整数,它是奇数(由客户端启动的)或偶数(由服务器启动的),因此,流ID必须由可争论的HTTP / 2实现来管理。
  • HTTP / 2推送资源被推送以响应先前的请求流ID。

但是这些实际上只是连接级别的问题和效率。对于HTTP / 2用户(例如Web开发人员),每个HTTP / 2请求都与在HTTP / 1.1下一样独立,并且HTTP仍然是无状态的。