我可以让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
谢谢, 院长
答案 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库中。)