4

我有一个带有 http2 的 Apache,并且我已经将我想保存在浏览器缓存中的文件进行服务器推送,但它没有,我不知道为什么。

我已经使用 php 文件进行了推送,如下所示。

header( 'Link: <'https://www.myweb.com/mypath'>;rel="preload";as="video"', FALSE );

从我的角度来看,服务器推送正在工作,因为我可以在 access_log 中看到对服务器的请求,但我认为文件应该保存在浏览器缓存中,但它没有。

我尝试让服务器推送文件,然后请求该文件并从缓存中获取它(请参阅 Chrome 的网络控制台“从缓存”)。

谢谢

4

1 回答 1

0

你说的都是真的,我的代码上也有,但问题在于对 Google Chrome 缓存保存的理解。

当您在 HTTP2 连接上使用服务器推送发送某些文件时,通过服务器推送请求的文件作为响应发送给客户端,但在浏览器请求文件之前,Google Chrome 不会将其保存到 Google Chrome 缓存中。

例如:服务器将 index.html 的响应连同它的 stylesheet.css 发送出去(这个是通过服务器推送发送的)。只有当谷歌浏览器请求 Stylesheet.css 时,样式表才会被保存到谷歌浏览器缓存中(客户端只请求了索引 html 并推送了样式表)。如果谷歌浏览器没有请求它,它将是一个无人认领的推送,它不会被保存到缓存中。

如果您成功推送,并重新加载页面,您将在 Google Chrome 上看到“来自缓存”。

谢谢你的时间。

于 2016-04-06T11:33:55.040 回答