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

Can I have my cloudrun server receive http/2 requests?

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

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

如果可能的话,我正在考虑从 webpieces 中抓取一些片段并创建一个没有 http1.1 的纯 http/2 服务器用于我 'know' 只会做的微服务 http/2.

此外,如果我有一个纯粹的 http/2 服务器,有没有办法在需要时 google 从 http1 请求转换为 http/2 以便我也可以托管网站?

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

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

谢谢, 院长

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

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

因此,如果您的应用程序实际上可以使用 h2c 协议提供未加密的流量,那么云 运行 负载均衡器 <=> 您的应用程序之间的流量可以 HTTP/2,从未降级为 HTTP/1。

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

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

curl -v --http2-prior-knowledge http://localhost:8080

并查看 < HTTP/2 200 响应。

(我会确保将其添加到 FAQ 存储库中。)