我的目标是 我想让浏览器缓存我的整个网站,但只在我更改了一个或多个文件时才下载静态内容。
我的情况
经过一些研究,我找到了一种方法来做到这一点。那就是在我的htaccess文件中添加Far Future Expires Header
,并使用filemtime()
函数为我的文件添加查询字符串。
问题
当我点击地址栏并在firefox中输入我的网址时,Firebug会显示38.3 KB (36.4 KB from cache)
当我在firefox中按F5时,Firebug会显示:
241.1 KB (10.9 KB from cache)
现在我已经尝试对Google做同样的事情,他们正在发送HTTP标头304。我已经阅读了很多关于ETag和Last Modified标题的内容,但我听到很多人都说他们不太可靠。
我的问题 如果我想用我的静态内容发送HTTP标头304,如果用户按下F5,如谷歌,那么最好的解决方案是什么?
我问这个问题,因为我经常访问一个网站,并使用F5查看是否有一些新信息可用。不要重新加载图像等。
的更新
似乎Firefox正在控制缓存的使用方式,我也想在用户按下F5时使用缓存。
答案 0 :(得分:2)
重新加载的目的是重新加载页面。如果浏览器在用户特别要求时忽略缓存,则没有服务器端标头魔法。
Google的解决方案是检查抓取工具是否发送了If-Modified-Since标头:
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
header("HTTP/1.0 304 Not Modified");
exit();
}
这个技巧可以用于浏览器,但不能用于强制重载模式,比如Firefox的SHIFT + RELOAD。
答案 1 :(得分:1)
您还可以使用较新的应用程序缓存功能
我不知道你的目标浏览器是什么,但到目前为止,大多数浏览器都支持它很多版本。
这样,您就可以定义仅下载一次的静态。
有关该主题的一些非常好的信息,您可以查看此页面:
http://diveintohtml5.ep.io/offline.html
答案 2 :(得分:0)
我不确定我是否理解你的问题的意图,但你可以使用标题功能在php中指定响应代码,无论用户是否按下按钮。