58

我有一个网页index.html托管在特定服务器上。我已经指出example.comexample.com/index.html因此,当我在 index.html 中进行更改并保存它,然后尝试打开 example.com 时,更改不会反映。网页被缓存的原因。

然后我手动刷新页面,因为它加载了新副本而不是从缓存中,所以它工作正常。但我不能要求我的客户这样做,他们希望一切都是完美的。所以我的问题是,关于如何让文件每次都从服务器而不是从缓存中加载,是否有技巧或技术?

PS:我知道 CSS、JS 和图像文件的技巧,即附加?v=1但不知道如何为 index.html 执行此操作。

任何帮助,将不胜感激。谢谢!

4

8 回答 8

61

这样:

<meta http-equiv="expires" content="0">

将内容设置为“0”会告诉浏览器始终从 Web 服务器加载页面。

于 2012-11-10T10:49:06.183 回答
10

元标签对我不起作用。我从实现过滤器或控制器的 java 类中设置标题。它奏效了。这是代码

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.
于 2014-08-26T15:31:45.597 回答
5

截至 2018 年,只有两种最可靠的方式可用

1)**<meta http-equiv="expires" content="0">**使用此元标记但要小心,因为此标记会在浏览器处理网页后立即破坏页面的所有缓存。

2) 在服务器上为每个页面请求生成一个唯一 ID,并将此 ID 附加到 HTML 文档内所有文件名的末尾,并带有?在每次需要从服务器加载的图像、文档、css/js 文件、视频等上附加唯一 ID 之前。例如,如果您<img src="images/profile223.jpg" alt="profile picture">在服务器端有 HTML 标签,则在文件名末尾附加唯一 ID,如下所示echo '<img src="images/profile223.jpg?'.$uniqueid.'"" alt="profile picture">';。在此示例中,我使用 php,但您可以生成任何语言的唯一 ID。Google、Facebook、Microsoft、Twitter 等所有大公司都使用这种技术,因为它是最有效的方法,并且不会影响您想要存储在用户浏览器上的缓存数据,例如登录会话 ID。这种技术是跨浏览器兼容的,并支持旧版本的 IE、Firefox、Chrome、Safari 和 Opera。您可以使用相同的技术在 url 末尾附加唯一 id

于 2018-04-20T12:01:21.087 回答
3

您可以尝试以下方法。它对我有用。

请在您的 .htaccess 文件中添加以下代码行。

<IfModule mod_headers.c>

    <FilesMatch "\.(html|php)$">
        Header set Cache-Control "no-cache, no-store, must-revalidate"
        Header set Pragma "no-cache"
        Header set Expires 0
    </FilesMatch>

    <FilesMatch "\.(ico|pdf|jpg|png|gif|js|css)$">
        Header set Cache-Control "max-age=172800, public, must-revalidate"
    </FilesMatch>

</IfModule>

如果您使用上述代码,浏览器将不会缓存 .html 文件。

于 2019-06-26T11:50:41.220 回答
2

将这个元标记添加到标题中适用于大多数浏览器(在这种情况下 index.html 不会被缓存):

<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" />

有点晚,但它可能会帮助别人!

于 2019-10-09T08:33:45.207 回答
1

您可以随文件发送额外的标头以告诉客户端(即浏览器)该文件不能被缓存。如果您有 Apache,请查看mod_expires。如果您使用服务器端脚本语言,例如 PHP,您也可以使用它来解决它。

于 2012-11-10T10:52:42.783 回答
1

我曾经在我的网站上遇到过这个问题。在您的网址中添加 q=''

http://yoururl.com/somelinks?q=fill_with_random_number

对我来说,它有效

于 2017-06-06T07:32:22.903 回答
0

我强烈建议不要使用元标记,而是使用 Murali Krishna Bellamkonda 发布的 htaccess。这将永远是最好和最安全可靠的方式。您可以微调您的整个系统以长时间保持缓存,在特定时间刷新文件等......继续尝试所有这些元标记,看看会发生什么!(不,我不会)查看带有 ExpiresDefault A5 的 Header set Cache-Control "max-age=5, immutable" 以获得无缓存选项。

于 2020-05-17T17:21:32.903 回答