在阅读了 HTTP/2 RFC (#7540)和 TLS-ALPN RFC (#7301)之后,当 ALPN 缺少一端时,我仍然无法弄清楚预期的行为。
假设我有一个使用 HTTP/2“h2”(通过 TLS)的客户端,它与支持 HTTP/2 但不在“服务器你好”中发送 ALPN 扩展的服务器通信。客户的预期行为是什么?
到目前为止,我见过的大多数客户端都认为服务器不支持 HTTP/2 并将连接降级到 http/1.1,但很少有人忽略(go-gRPC)继续使用 HTTP/2。
如果使用在客户端 ("h2") 和服务器 ("h2c") 之间执行 SSL 终止的 AWS 经典 LB,则此方案可能更实用。在此示例中,客户端发送值为“h2”的 ALPN 扩展,LB 在没有 ALPN 的情况下执行 SSL 握手(正如他的预期),最终 JAVA gRPC 由于 HTTP/1.1 降级而失败。