服务器推送:如何让它工作

服务器推送:如何让它工作

nginx/1.18.0(Ubuntu)

我想使用服务器推送技术。

nginx.conf

location = /push/ {
        http2_push https://slabaya.ru/1/css/style.css;
}

html

<html>
<head>
<link rel="stylesheet" href="https://slabaya.ru/1/css/style.css">
</head>

<body>
    <p>Test</p>
</body>
</html>

结果:不起作用。

https://c.radikal.ru/c21/2105/84/50598f04e294.png

https://d.radikal.ru/d32/2105/ba/7e5d2cf6e02a.png

从图片中可以看出,Chrome 和 Webpagetest 都没有表明 css 文件被推送。

你能帮我解决这个问题吗?

答案1

您的location阻止仅适用于 URL http://slabaya.ry/push/URL。

然而,HTTP/2 推送并不容易正确实现,这就是它将从 Chromium(Chrome 和许多其他浏览器的基本代码库)中删除的原因。

HTTP/2 推送的问题是,有时客户端已经拥有了上一次页面加载的资源,你需要有条件地实现推送。这并不容易做到。

如果我是你,我不会费心尝试实现推送。工作量太大,收获甚微。

如果您仍想修复配置,则需要将http2_push指令移到块之外location

答案2

您只能从提供请求的域进行推送。

在您的示例中,文档由一个域提供,而样式表由另一个域提供。

因此,文档无法“推送”样式表,因为它不拥有该样式表。它需要获取样式表然后推送它,但即使这是可能的(但事实并非如此,您只能推送相对路径源),域也会发生变化,因此不会与文档 HTML 中引用的域相同,因此无论如何它都必须请求该域。

我同意 Tero 所说的一切,关于推送很困难,收益值得怀疑,并且已经声明它将从 Chrome 中删除。

相关内容