【发布时间】:2020-04-23 08:51:19
【问题描述】:
具有以下标题的文档的响应进入 Nginx:
link: </picture.jpg>; as=image; rel=preload
link: </_next/static/chunks/commons.4e96503c89eea0476d3e.module.js>; as=script; rel=preload
link: </_next/static/runtime/main-3c17cb16bbbc3efc4bb5.module.js>; as=script; rel=preload
link: </_next/static/runtime/webpack-0b10894b69bf5a718e01.module.js>; as=script; rel=preload
link: </_next/static/Q53NXtgLT1rgpqOOsVV6Q/pages/_app.module.js>; as=script; rel=preload
link: </_next/static/Q53NXtgLT1rgpqOOsVV6Q/pages/index.module.js>; as=script; rel=preload
在 HTTP/2 Server Push 的帮助下,请求被推送到客户端,但 6 个请求中有 5 个会下载两次(一次通过推送,一次由文档触发)。
Chrome 开发工具中的网络选项卡如下所示:
我已经测试了Type 是否设置正确并且看起来没问题。可能是什么问题?
可能出了什么问题?我很确定请求不应该重复
@编辑 我尝试在没有 Nginx 的情况下进行服务器推送(直接与 Node.js 后端对话,而不是为 Nginx 附加链接头的后端)。它可以毫无问题地工作。当我使用 Nginx 时会出现问题。
顺便说一句。我知道不应该通过服务器推送推送所有内容,尤其是图片,但我这样做只是为了进行清晰的测试。如果仔细观察,似乎只有脚本被复制,图片只下载一次。
【问题讨论】:
-
您是否将这些作为匿名 XHR 请求加载?
-
是的,预加载链接和脚本标签都带有跨域匿名标签。我也尝试将这些更改为使用凭据,但问题仍然存在。
-
我很惊讶没有修复它。顺便说一句,您不应该需要预加载链接,因为您现在拥有执行相同操作的预加载标头。尝试完全删除它们。
-
是的,我也会尝试这样做它们是由我使用的库自动放置的 - Next.js
标签: google-chrome nginx chromium http2 server-push