首页 > 解决方案 > 我可以让我的 cloudrun 服务器接收 http/2 请求吗?

问题描述

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

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

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

另外,如果我有一个纯 http/2 服务器,有没有办法让谷歌在需要时将 http1 请求转换为 http/2,这样我也可以托管网站?

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

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

谢谢,院长

标签: http2google-cloud-run

解决方案


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

并查看< HTTP/2 200响应。

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


推荐阅读