nginx HTTP/2 模块是不是支持服务器推送?
Posted
技术标签:
【中文标题】nginx HTTP/2 模块是不是支持服务器推送?【英文标题】:Does the nginx HTTP/2 module support Server Push?nginx HTTP/2 模块是否支持服务器推送? 【发布时间】:2016-02-05 20:28:43 【问题描述】:我打算将我的 nginx 升级到支持 HTTP/2 的 1.9.6。
nginx实现了HTTP/2服务器推送吗?
参考: https://ma.ttias.be/service-side-push-http2-nghttp2/
【问题讨论】:
【参考方案1】:是的,自 2018 年 2 月 20 日发布的 version 1.13.9 以来,Nginx 支持 HTTP/2 服务器推送。
Nginx 团队在原1.9.5 blog post 中指出,当时不支持。
【讨论】:
从 2016 年 9 月 13 日的 v 1.11.4 开始,这仍然是正确的。 关于服务器推送何时会添加到 nginx 的任何消息?等待这个如此糟糕......【参考方案2】:您需要通过 nginx plus 订阅 https://www.nginx.com/blog/http2-r7/ 付费。
Apache 免费提供
https://httpd.apache.org/docs/2.4/mod/mod_http2.html#h2push
【讨论】:
来自您的 URL:“此版本不支持 HTTP/2 RFC 中定义的“服务器推送”功能。NGINX Plus 的未来版本可能包含它。” 我贴了两个网址,哪一个说不支持? 来自第一个链接:“此版本不支持 HTTP/2 RFC 中定义的“服务器推送”功能。NGINX Plus 的未来版本可能包含它。”【参考方案3】:编辑:
Nginx 自 2018 年 2 月 20 日发布的 v1.13.9 起支持 HTTP/2 服务器推送。
旧答案:
自 2017 年 3 月 (v1.11) 起,Nginx 不支持 HTTP/2 服务器推送。
nginx 的 Owen Garrett 总结了以下原因:
它是http/2的非必要和可选部分
如果客户端已经缓存了资源,那么将其推送给它们可能会不必要地浪费带宽。
服务器推送规范未来可能会发生变化。
链接标题作为提示很有用,但 Web 开发人员的使用率很低。
服务器推送已作为 SPDY 的一部分提供,并未被许多 Web 开发人员使用。
阅读他原来的 cmets here。这个table 准确地描述了服务器提示与服务器推送的优缺点。
就我个人而言,这让我很失望,因为我认为对于愿意花时间优化页面速度的 Web 开发人员来说,这将是一项有价值的功能。我也知道一些像 Cloudflare 这样的大型 CDN 已经在 nginx 中实现了自己的版本来优化页面下载。
【讨论】:
这并不像人们想象的那样浪费带宽。推送对象的标头首先发送(在请求的页面之前),以便客户端应该有一些时间来取消服务器推送。 @StephenKing 如果实现了服务器推送,则客户端可能在与服务器推送相关的帧已经到达之前没有机会重置。所以很可能是浪费。但是,有几种明显的解决方案可以避免推送可能被缓存的资产,包括使用 cookie 和简单的日志历史记录。 我喜欢 Owen 所说的“Web 开发人员的使用率很低”——这不是 因为 Nginx 不支持它吗?!【参考方案4】:自 2018 年 2 月 8 日起,nginx 已添加对 http/2 服务器推送的支持:
https://hg.nginx.org/nginx/rev/641306096f5b
【讨论】:
我刚刚试了一下,效果很好 - 您可以为静态内容(直接由 NGINX 提供服务器)和后端(只要后端通过Link
标头宣传链接)进行设置。我记录了我在这里学到的东西:ops.tips/blog/nginx-http2-server-push以上是关于nginx HTTP/2 模块是不是支持服务器推送?的主要内容,如果未能解决你的问题,请参考以下文章
HTTP/2 服务器推送(Server Push)教程(HTTP/2 协议的主要目的是提高网页性能,配置Nginx和Apache)