具有最佳缓存控制的网站

时间:2011-03-03 11:30:09

标签: php caching .htaccess header

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

我的情况
经过一些研究,我找到了一种方法来做到这一点。那就是在我的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时使用缓存。

3 个答案:

答案 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中指定响应代码,无论用户是否按下按钮。

http://php.net/manual/en/function.header.php