【问题标题】:Is it possible that a reverse proxy upgrades a http/1.1 connection to http2?反向代理是否有可能将 http/1.1 连接升级到 http2?
【发布时间】:2020-02-22 11:19:22
【问题描述】:

不确定是否可行,但如果你有一个用于 HTTP/1.1 连接的反向代理,如果目标能够提供服务,是否可以从反向代理升级到 HTTP/2 的连接HTTP/2?

如果有帮助,代理是用 go 编写的,它使用 reverseproxy 包。

【问题讨论】:

    标签: go reverse-proxy http2


    【解决方案1】:

    是的,完全有可能。

    许多网络代理(大多数?)是 HTTP 代理(也称为 7 级代理)并且有两个独立的 HTTP 连接 - 一个用于传入“前端”,另一个用于传出“后端”。这两个连接可以有完全不同的设置——包括支持不同的 HTTP 版本。

    其他代理是 TCP 代理(也称为 4 级代理),它们没有 HTTP 的概念,只是转发 TCP 数据包并假设其他人知道如何处理它们。在这种情况下是不可能的 拥有不同的 HTTP 版本。

    也就是说,most of the benefit of HTTP/2 is for the front end connection 作为 HTTP/2 提高了 HTTP 对高延迟连接的性能影响。通常,后端连接通过更低延迟、更高带宽的连接(甚至可能在同一个数据中心)。因此,尽管您要问的问题完全有可能,但您是否要这样做更值得怀疑。可能正是因为这个值得商榷的好处,许多服务器实际上并不支持通过 HTTP/2 的后端连接。 Apache does but has it marked as experimental。 Nginx 没有和say they won’t。我不熟悉 Go but looks like it might support this

    【讨论】:

    • 嗨,Barry,如果我们对编程语言进行抽象,从代理端进行这种升级需要哪些步骤?在将请求传递到上游之前,我应该包含一个特定的标头吗?我尝试了一些设置升级标头的实验,但似乎反向代理不喜欢它。
    • 您不会进行升级。您只需告诉代理连接到后端,如果双方都支持 HTTP/2,那么它将作为连接设置的一部分发生。您无需升级连接 - 您设置了两个独立的连接。老实说,我认为我没有理解你的问题。也许确切地解释你正在尝试做什么(以及为什么!)会有所帮助。您是否正在尝试为不支持 HTTP/2 的系统有效地启用它?
    • 这是我的用例:我有很多前端,还有一个云端分发服务来自 s3 存储桶的资产。我知道 cloudfront 支持 HTTP/2,所以我想检查它们是如何通过 HTTP/2 加载的。基本上,当前端请求例如 image.png 时,根据请求资产的前端,我需要将其重写为云端分发中的特定路径。目前,前端向反向代理发出请求,路径被重写,然后请求被发送到云端。
    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2019-06-03
    • 2021-11-27
    • 2021-09-24
    相关资源
    最近更新 更多