使用 HTTP/2 甚至 HTTP/3 进行反向代理和后端之间的连接有哪些优点和缺点?
我还没有真正遇到过这种情况,只看到 H2 和 H2 部署在反向代理和 CDN 前面。ASFIK H2 和 H3 通常(H2C 是一回事,对吗?)需要 TLS,如果您想远离后端进行 TLS 终止,这将使其不适合。
H2 也可能比基本的 HTTP/1.1 后端更难设置和配置。从好的方面来说,多路复用不是对通过 n 个 TCP 连接获得的固定并发请求数量的改进,反向代理将为 HTTP/1.1 后端连接打开吗?
在 CPU、内存和 IO 上的负载方面有哪些节省和成本?
有没有人有这方面的实际经验?
我在 Stack Overflow上写了这个答案,它仍然非常相关。
HTTP/2(和 HTTP/3)的好处主要在于前端。您不太可能在后端看到任何真正的、明显的好处。而且,鉴于这些较新的协议通常缺乏支持,我不会欺骗自己以很少的收获来启用它。
一个有趣的点(正如我链接答案底部的编辑所指出的那样)是在将前端的 HTTP/2(或 3)降级到后端的 HTTP/1.1 时可能出现的安全问题。这些主要是由于 HTTP/1.1 中的问题(2 和 3 旨在解决)和这些边缘情况的错误实现,但它仍然提供了一个充分的理由,尽可能避免使用 HTTP/1.1。
说目前 HTTP/3 肯定是有成本的,我不会在后端推荐它(或者甚至是你设法诚实的前端 - 通过 CDN 使用是恕我直言的方式)。它仍然太新(最终的 RFC 甚至还没有发布!)而且我们花了数年时间在操作系统和整个网络堆栈中优化 TCP。QUIC 在用户空间而不是内核中这一事实对未来有很多优势,但速度和效率并不是其中之一。差距正在缩小(正如Fastly 的这份报告所示),但它仍然存在。
所以一旦 HTTP/2 变得无处不在(这发生的速度比大多数人想象的要快!)我会去做,但我不会在后端强调它(这是值得在前端付出额外努力的事情) )。HTTP/3 落后了 5 年,才刚刚完成,所以现在更不用说在后端推荐它了。但老实说,我相信 QUIC 和 HTTP/3 将在未来令人兴奋,所以绝对值得关注。