为什么 Swift NIO 示例使用 HTTP/2 到 HTTP/1 协议转换?

Why is Swift NIO example uses HTTP/2 to HTTP/1 protocol conversion?

HTTP2ToHTTP1ServerCodec 的目的是什么。为什么需要将 HTTP/2 协议转换为 HTTP/1 协议?

channel.configureHTTP2Pipeline(mode: .server) { (streamChannel, streamID) -> EventLoopFuture<Void> in
    // For every HTTP/2 stream that the client opens, we put in the `HTTP2ToHTTP1ServerCodec` which
    // transforms the HTTP/2 frames to the HTTP/1 messages from the `NIOHTTP1` module.
    streamChannel.pipeline.addHandler(HTTP2ToHTTP1ServerCodec(streamID: streamID)).flatMap { () -> EventLoopFuture<Void> in
        // And lastly, we put in our very basic HTTP server :).
        streamChannel.pipeline.addHandler(HTTPServer())

这是 Swift NIO 示例存储库的修改 code snippet

HTTP/2 是单个 TCP 连接(和新的有线协议)中多个流的 HTTP(/1) 语义。作为一个选项,SwiftNIO 因此可以允许您使用 HTTP(/1) 数据类型来处理 HTTP/2。这允许您完全重用您使用 SwiftNIO 和 HTTP/1 编写的 server/client 实现 HTTP/2,这对大多数人来说也是一个好处。

但是绝对不需要该翻译。如果您更喜欢直接对 HTTP2 frames 进行操作,则无需将 HTTP2ToHTTP1ServerCodec 添加到管道中。


稍后编辑:我还应该指出 HTTP2toHTTP1ServerCodec 实际上是一段非常简单的代码,它只是翻译 [=] 之间的入站和出站消息23=] 帧和 HTTP/1 消息部分。 Code is here.