具有最佳缓存控制的网站

具有最佳缓存控制的网站

我的目标
我想让浏览器缓存我的整个网站,但仅当我更改一个或多个文件时才下载新信息。

我的情况
经过一番研究,我找到了一种方法来做到这一点。那就是Far Future Expires Header在我的 htaccess 文件中添加一个,然后使用该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 标头的文章,但我听到很多人说它们并不十分可靠。

我的问题
如果我想在用户按下 F5 时发回 HTTP 标头 304,就像 Google 一样,那么最好的解决方案是什么?


更新
似乎 Firefox 正在控制缓存的使用方式,并且当用户按下 F5 时我也想使用缓存。

答案1

正如@symcbean所建议的,建议使用唯一的URL来避免任何与陈旧/新内容有关的问题。无论如何,要消除304请求,请删除ETags和Last-Modified标签。

下面的 URL 提供了加速/缓存网页的很好的提示。
http://www.askapache.com/htaccess/apache-speed-last-modified.html

答案2

当你使用 Apache2 时,有一个名为“mod-expires”我们在这里使用它进行缓存。模块为请求设置了过期标头。

答案3

避免条件请求 - 除非您提供大量非常大的文件(例如视频),否则它们实际上会使您的网站速度变慢。

它们其实不太可靠。

IME,它们非常可靠 - 但也很低效。

但仅当我更改了一个或多个文件时才下载新的信息。

不要更改文件 - 为新内容创建新的 URL。您无法撤销已发布的缓存信息。

那就是向我的 htaccess 文件添加一个 Far Future Expires Header,并使用 filemtime() 函数向我的文件添加一个查询字符串

哦,抱歉,你已经这样做了。

在浏览器中按下 f5 键并不是衡量可缓存性的现实方法。

是的,你可以做出 304 响应,如果浏览器发出有条件请求并且当前内容满足条件 - 但如上所述,这不是处理这种情况的好方法 - 假设您在页面上有一个出现 4 次的点状图形。缓存过期后,每次加载此页面时,浏览器都会向源发送 4 个条件请求。虽然您可以在 304 响应中发送新的缓存指令,但在实践中通常不太容易做到这一点。请记住,延迟比带宽更成问题。

相关内容