具有最佳缓存控制的网站

6

我的目标
我希望让浏览器缓存我的整个网站,但只有在更改一个或多个文件时才下载静态内容。

我的情况
经过一些研究,我找到了一种方法来实现这一点。那就是在我的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头304回来。我已经阅读了很多关于ETag和Last Modified头的文章,但我听说很多人说它们不是真正可靠的。

我的问题
如果我想像谷歌一样,在用户按下F5时发送HTTP头304返回我的静态内容,那么最好的解决方案是什么?

我问这个问题是因为我经常访问一个网站,并使用F5查看是否有新的信息可用。而不是重新加载图片等等。


更新
似乎Firefox控制缓存的方式,我希望在用户按下F5时也使用缓存。

3个回答

2
reload 的目的是重新加载页面。如果浏览器被写成在用户明确要求忽略缓存时忽略缓存,则没有服务器端头信息的魔法。
对于谷歌来说,解决方案是检查爬虫是否发送了 If-Modified-Since 头文件:
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
    header("HTTP/1.0 304 Not Modified");
    exit();
}

这个技巧在浏览器中可能有效,但在像Firefox的SHIFT+RELOAD这样的强制重新加载模式下无效。

我理解你的意思。我的意思是,我经常访问一个网站,并使用F5查看是否有新信息可用。不是重新加载图像等内容。其次,这是PHP代码。我如何将其用于我的静态内容(例如图像)? - Michiel Pater
对于您的静态内容,Apache 的 mod_expires 应该可以解决问题。此外,如果浏览器发送了 If-Modified_Since 标头,Apache 将回复 304(或者至少我会感到惊讶如果没有)。 - vbence
你可能会找到一些 .htaccess 规则。只是猜测。 - tacone

1

您还可以使用较新的应用程序缓存功能。
我不知道您的目标浏览器是什么,但大多数浏览器迄今为止都已经支持它了。
这样,您就可以定义静态文件只下载一次。

对于该主题的一些非常好的信息,您可以查看此页面:
http://diveintohtml5.ep.io/offline.html


谢谢你的回答,但我担心IE用户。 - Michiel Pater

0

我知道,但是如何对我的图像、CSS等进行操作呢? - Michiel Pater

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接