我可以让我的 cloudrun 服务器接收 http/2 请求吗?

Dea*_*ler 4 http2 google-cloud-run

我可以让 Google 在云运行中向我的服务器发送 http/2 请求吗?

我不确定谷歌如何知道我的服务器支持它,因为谷歌终止负载均衡器上的 SSL 并将 http 发送到云运行中的无状态服务器。

如果可能的话,我正在考虑从 webpieces 中获取一些内容,并为我“知道”只会执行 http/2 的微服务创建一个没有 http1.1 的纯 http/2 服务器。

另外,如果我有一个纯 http/2 服务器,是否有一种方法可以让 google 在需要时将 http1 请求转换为 http/2,以便我也可以托管网站?

我能找到的唯一信息是一个很棒的常见问题解答,它似乎缺少它是否在服务器端(而不是客户端)支持 http/2...

https://github.com/ahmetb/cloud-run-faq

谢谢,迪恩

Ahm*_*gle 7

Cloud Run 容器合同要求您的应用程序在未加密的HTTP 端点上提供服务。但是,这可以是 HTTP/1 或 HTTP/2。

如今,gRPC 应用程序在 Cloud Run 上运行,并且 gRPC 实际上使用 HTTP/2 作为其传输。这是可行的,因为 gRPC 服务器(除非配置了 TLS 证书)使用H2C(HTTP/2 未加密的明文)协议。

因此,如果您的应用程序实际上可以使用h2c协议提供未加密的流量,则 Cloud Run 负载均衡器 <=> 您的应用程序之间的流量可以是 HTTP/2,而无需降级到 HTTP/1。

例如,在Go中,您可以使用https://godoc.org/golang.org/x/net/http2/h2c包来自动检测和升级http2连接。

要测试您的应用程序是否正确实现了 h2c,您需要在本地运行:

curl -v --http2-prior-knowledge http://localhost:8080
Run Code Online (Sandbox Code Playgroud)

并查看< HTTP/2 200回复。

(我会确保将其添加到常见问题解答存储库中。)