http2 - 我可以让我的 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
谢谢,院长
解决方案
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 存储库中。)
推荐阅读
- angular - 无法让 Angular Google Map AGM 与 Angular 11 一起使用
- ruby-on-rails - attr_accessor 没有从 rails 模型更新值
- f# - 在 F# 中,如何更改记录中属性的属性(语法?)
- python-3.x - 使用自定义正则表达式验证linkedIn url
- android - android.content.ReceiverCallNotAllowedException:BroadcastReceiver组件不允许注册接收intent
- assembly - NASM 基本加法程序给出重定位被截断以适应:R_386_16 针对 `.bss' 错误
- python - 无法定位 Selenium 中真正存在的元素
- php - 1 分钟后无法发送推送通知
- kuzzle - 使用钩子或订阅在 Kuzzle 中发送推送通知的更好方法是什么?
- java - 如何在没有打印语句的情况下扫描多行