如何禁用Nginx服务器推送刷新网页(禁用缓存资源推送)?

如何禁用Nginx服务器推送刷新网页(禁用缓存资源推送)?

我已将 Nginx http/2 服务器推送添加到我的 WordPress 站点选定文件(字体、CSS 和 JS)。它按预期运行。不过,还是存在一个问题。

如果访问者再次导航到我网站上的另一个页面,Nginx 服务器推送同样会失败,即使它们已经缓存在访问者的 Web 浏览器中。每个页面预览 Nginx 都会重新推送每个服务器推送文件。

如果文件已经缓存在访问者设备上,有什么方法可以暂时禁用服务器推送?

答案1

您捕获了 HTTP2/Push 的一个已知问题,这也是它被弃用的原因之一 - Chrome 正在评估是否删除 HTTP2/Push。我建议不要花费大量工程时间来调试它。

https://groups.google.com/a/chromium.org/g/blink-dev/c/K3rYLvmQUBY/m/vOWBKZGoAQAJ

答案2

nginx 中没有直接的机制来选择性地执行推送。

一种方法是仅当客户端未随请求发送 cookie 时才推送资源。

该方法可以按如下方式实现:

http关卡中定义一个地图:

map $http_cookie_preloaded $resources {
    "visited" "";
    default "</style.css>; as=style; rel=preload, </image1.jpg>; as=image; rel=preload";
}

server块中:

server {
    http2_push_preload on;
    add_header Set-Cookie "preloaded=1";
    add_header Link $resources;
}

这样,用户在第一次访问时就会获得推送的资源。他们还会获得一个“预加载”的 cookie,从而阻止在后续页面加载时推送。

资源在map default映射中指定。

相关内容