Rack / Rails 中的 HTTP/2 支持

Posted

技术标签:

【中文标题】Rack / Rails 中的 HTTP/2 支持【英文标题】:HTTP/2 Support in Rack / Rails 【发布时间】:2016-01-15 13:29:03 【问题描述】:

HTTP/2 由all major browsers 发布和支持。在Apache 和nginx 等主要Web 服务器中提供了一些实现。

但对于我们 Ruby 主义者来说,目前的选择似乎非常有限。曾几何时(2014 年 12 月),Aaron Patterson exploring ideas 在 Rack 2.0 中支持 HTTP/2,但这还没有实现。他还发布了一些关于Puma 和WEBrick 可能性的要点。这就是我设法找到的所有内容。

我的问题是,笼统地说:如果我有兴趣在 Rails 应用程序中使用 HTTP/2,存在哪些选项,它们包含 HTTP/2 的哪些特性,以及它们中的任何一个是否已准备好投入生产?

【问题讨论】:

【参考方案1】:

截至 2018 年 4 月,Rails v5.2.0 现在包含 HTTP/2 Early Hints,用于在主请求(资产推送)之前发送资产:

https://weblog.rubyonrails.org/2018/4/9/Rails-5-2-0-final/

注意:您仍然需要一个在启动时采用 --early-hints 标志的 Puma 版本(例如 v3.11.4)。

【讨论】:

【参考方案2】:

如果您想声称支持 HTTP/2 本身,您可以只使用 HTTP/2 运行 NGinX 并使用 Ruby 后端,大致正常 (https://www.nginx.com/blog/how-nginx-plans-to-support-http2/)。但是,这不会为您提供 HTTP/2 特定的功能,例如在没有客户端请求的情况下从服务器推送资产。

我相信它为您提供您关心的基本 HTTP/2 功能,每个连接的多个请求(无慢启动)和一个连接上的多路复用(不需要多个连接。)

那太好了。

【讨论】:

感谢您的回答。我现在会接受它,但我很想听听其他选择——如果可能的话,包括(当然)可以在 Heroku 上工作的东西。如果没记错的话,可以在 Heroku 上运行 nginx,但这违背了我使用 Heroku 的目的,因为我突然不得不更多地担心配置和部署。 HTTP2 将带来一组需要评估和实施的新架构实践。比方说缓存:你会想停止做连接...... 使用 Cloudflare 会自动获得与上面提到的 nginx 基本相同的好处,并且可以坐在 Heroku 前面。它甚至支持服务器推送,虽然与 Rails 结合起来不是特别好。

以上是关于Rack / Rails 中的 HTTP/2 支持的主要内容,如果未能解决你的问题,请参考以下文章

Rails 6,React,Rack-Cors [重复]

如何从 Rails 中访问 Rack 环境?

Heroku、Rails 4 和 Rack::Cors

Rack-cors 未在 swagger-ui_rails 的生产环境中显示标题

尽管 Rack::Cors [重复],但请求仍触及生产 Rails API

理解 Rack 应用及其中间件