http2 中的连接消息 header 应该是什么样子?

What a connect message header should look like in http2?

我发现获取消息 header 看起来像:

:method: GET
:scheme: https
:authority: server.net
:path: /config
accept: */*
accept-encoding: gzip,deflate

连接消息 header 应该是什么样子?

这个例子来自http2的RFC:

GET /resource HTTP/1.1           HEADERS
     Host: example.org          ==>     + END_STREAM
     Accept: image/jpeg                 + END_HEADERS
                                          :method = GET
                                          :scheme = https
                                          :path = /resource
                                          host = example.org
                                          accept = image/jpeg

我想知道 http2 中连接 header 的等价物。 在 Http1 中是:

CONNECT example.org:443 HTTP/1.1
Host: example.org:443

HTTP/2中CONNECT方法的格式在section 8.3中指定。

您在上面使用的格式看起来像:

:method: CONNECT
:authority: proxy.net:8080

按照规定,:scheme:path必须被省略。

HTTP/2 CONNECT 方法也可用于引导其他协议(参见 WebSocket over HTTP/2 示例),因此 :protocol pseudo-header 也可能存在。

但是请记住,这只是 HTTP/2 的文本表示;实际通过网络传输的字节是不同的,因为您必须使用 HPACK.

对它们进行编码

除非您实际上正在编写 HTTP/2 实现,否则最好使用现有库(几乎可以在任何编程语言中使用)来发送 HTTP/2 请求(任何类型):库将负责将您的 CONNECT 请求转换为正确的字节以通过网络发送。