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

时间:2020-04-15 14:58:36

标签: http2 google-cloud-run

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

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

如果可能的话,我正在考虑从Webpieces中获取一些信息,并为我所知道的微服务创建一个不带http1.1的纯http / 2服务器,而我“知道”只能使用http / 2。

此外,如果我有一个纯粹的http / 2服务器,是否有必要将google从http1请求转换为http / 2以便我也可以托管网站?

我能找到的唯一信息是一个很好的FAQ,它似乎缺少它在服务器端(而不是客户端)支持http / 2的功能了。

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

谢谢, 院长

1 个答案:

答案 0 :(得分:4)

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库中。)