1

我发现这个词很难说,所以请多多包涵。

当我更新网站并要求客户查看更改时,他们总是会看到上次缓存的结果。现在这不是问题,因为我可以要求他们按 ctrl f5 刷新所有缓存。

我的问题是,有没有一种方法可以强制客户端浏览器自动刷新所有内容?什么是通常的标准?我仍然想使用缓存,因为这样可以加快网站速度,只要能够在更新时告诉它。

我知道对于 javascript 文件和 css 文件,您可以更改文件的名称,以便浏览器将其视为新文件并重新下载它,例如 myCssFilev1.2.css 但实际的 HTML 呢?

4

4 回答 4

1

有几个元标记可以做到这一点:

<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

cache-control、expires 和 pragma 设置都在不同的浏览器中工作,所以最好包括所有这些。那应该可以解决您的问题。

编辑

正如 Ariel 所指出的,你必须小心这一点。如果这是高负载情况,您可能希望找到另一种解决方案。您可以尝试找到“中间地带”,但调整参数(将 expires 或缓存控制的 max-age 设置为某个值)。但是,如果您没有疯狂的服务器负载,那么这应该没问题。

于 2012-07-16T08:44:25.840 回答
0

是的。假设您有一个 javascript 包含。

做:

<SCRIPT src="file.js?<?=filemtime('file.js')?>"></SCRIPT>

这样做是将文件修改时间添加到文件的 url。因此,当您更改文件时,在浏览器中它将看起来像一个新文件,并且不会被缓存。

请注意,不断的filemtime调用可能会减慢速度。

您可以使用dirname() __FILE__和的组合PHP_SELF从相对页面自动计算物理文件页面,然后将其放入一个函数中,这样您就不必自己手动输入两次文件名。

于 2012-07-16T08:45:20.270 回答
0

它比看起来更棘手。老实说,我认为指示用户清空浏览器缓存是最直接的方法。如今,点击Ctrl+Shift+Del速度很快,并且适用于大多数浏览器,包括 Internet Explorer。

于 2012-07-16T08:52:52.657 回答
0

HTTP 标头 Last-Modified 和 Etag 用于减少网络上的流量。

浏览器请求带有Last-Modified标头的 Web 服务器。如果日期时间与服务器文件时间相同,服务器只响应304。或者,时间不同,服务器响应200和完整内容。

Etag 执行相同的过程。

还有更多类似 If-Modified-Since 、 If-Unmodified-Since ,请参阅 etagrfc2616的更多信息

于 2012-07-16T09:12:55.140 回答