我的目标
我想让浏览器缓存我的整个网站,但只在我更改一个或多个文件时才下载静态内容。
我的情况
经过一些研究,我找到了一种方法来做到这一点。那就是向我的 htaccess 文件添加一个 Far Future Expires Header
并使用 filemtime()
函数向我的文件添加一个查询字符串。
问题
当我点击地址栏并在 Firefox 中输入我的网站地址时,Firebug 显示 38.3 KB(36.4 KB 来自缓存)
当我在 firefox 中按 F5 时,Firebug 显示:241.1 KB(缓存中有 10.9 KB)
现在我尝试对 Google 做同样的事情,他们正在发回 HTTP header 304。我已经阅读了很多关于 ETag 和 Last Modified header 的内容,但我听到很多人说它们并不可靠。
我的问题
如果我想在用户按下 F5 时将 HTTP header 304 与我的静态内容一起发回,那么最好的解决方案是什么?
我问这个问题是因为我经常访问一个网站并使用 F5 查看是否有一些新信息可用。不要重新加载图像等。
更新
似乎 Firefox 正在控制缓存的使用方式,我也想在用户按 F5 时使用缓存。
最佳答案
reload 的真正目的是重新加载页面。如果浏览器在用户特别要求时忽略缓存,那么服务器端 header 就没有魔力了。
Google 的解决方案是检查爬虫是否发送了一个 If-Modified-Since header :
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
header("HTTP/1.0 304 Not Modified");
exit();
}
这个技巧可能适用于浏览器,但不适用于 强制重新加载 模式,例如 Firefox 的 SHIFT+RELOAD。
关于php - 具有最佳缓存控制的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5180135/