![]() |
1
0
|
![]() |
2
0
要启动HTTP2连接,应该已经建立了TCP连接。然后,客户机准备并发送第一个HTTP2数据包,其中包含以魔术字符串为前缀的设置帧,并为这个特定的TCP连接创建两个单独的动态表,一个用于客户机源消息,另一个用于服务器源消息。当服务器端收到一个以魔术字符串为前缀的HTTP2数据包时,它同样会创建两个独立的动态表。 当客户机准备第一个HTTP2请求时,它首先构造HEADERS框架并在其中附加所有需要的头。第一个头帧的每个头是静态表的1字节长度索引(例如0x02->方法:GET)或由几个字节组成的头的文本表示。在后一种情况下,字节序列的第一个字节向服务器提供有关如何处理和存储这个新头的信息。同时,客户机已经在其动态表中存储了头文件。 当服务器端接收到第一个HTTP2头帧时,它将使用其静态表对头块进行解码,以解码单字节头。对于每个文本头,它将根据从头字节序列的第一个字节检索到的信息在动态表中创建一个新条目。 第二次从客户端准备包含头(HEDERS、CONTINUATION或PUSH PROMISE)的帧时,已经存储在动态表中的每个使用的头表示为1字节*(动态表索引)。对于第一次使用并且不在静态表中的每个头,将再次使用文本表示,并在客户机动态表中添加一个新条目。当服务器端接收到第二帧时,它会查看其静态或动态表来解码单字节头。对于每个文本头(第一次出现),它还将在其动态表中创建一个新条目。
显然,按顺序交付帧是至关重要的。这是由底层TCP协议保护的。此外,头文件应该始终以串行方式在两侧进行处理。 HTTP2用途 HPACK 标题压缩格式。 * 为了简单起见,在上面的示例中假定了“具有增量索引和新名称的文本头字段” |
![]() |
snøreven · 未使用HTTP2推送的webfonts 7 年前 |
![]() |
rotoava · NSURLSession HTTP/2内存泄漏 8 年前 |
![]() |
Guillaume D. · Jetty HTTP2服务器推送支持 10 年前 |