如何确保以前的访问者看不到旧的HTML页面?

时间:2018-11-14 09:26:22

标签: html nginx cache-control cache-invalidation

我看到了很多有关强制缓存重新加载的答案,推荐了一种结合HTML页面本身的解决方案。

但是,如果您遇到的情况是您的旧网站被写为index.html主页,而现在又将其替换为新内容,那么如何确保回访者看到新内容呢?

旧网站曾经以index.html作为索引页(在nginx的配置下),我现在将其更改为index.php。但是,无论何时我从以前访问过的浏览器访问它,它仍然会打开缓存的旧index.html页。新的浏览器将正确加载index.php

我找到的看似正确的答案之一是告诉nginxexpires -1;部分设置server {},这将迫使缓存无效;但由于某些原因无法正常工作。

当然,需要发生的事情是访问者将始终获得新页面,而无需自己明确发布刷新。

大概解决方案应该是通过标头使缓存无效。但是如何?

进行编辑以解决所有建议的评论和答案

  1. 就像我在回答的第一段中所说的那样,无法通过编辑索引文件(例如为“缓存清除”添加参数)解决此问题,因为索引文件本身已被缓存,这就是问题。 / li>
  2. 我的问题中无处提及javascript或CSS文件。同样,已缓存的是index.html文件。
  3. index.htmlindex.php的存在不会产生冲突。整个系统运行正常,只有在将index.html设置为服务器配置中的索引页时,以前访问过该页面的旧访问者仍将缓存的index.html作为主页将索引更改为index.php之后。即使在index.html文件被完全删除后,仍然会发生此问题,这也很容易证明。因为一旦浏览器缓存了HTML文件,它就不再向服务器询问索引文件是什么,而只会显示它已缓存的内容。

所以完整的场景是这样:

  1. 网站已将index.html设置为服务器配置中的索引页面
  2. 浏览器访问网站
  3. 浏览器缓存主页
  4. 服务器配置中的索引页面已更改为index.php
  5. 相同的浏览器访问网站
  6. 浏览器显示之前的缓存index.html

在数字5中,如果我要使用新的浏览器访问该网站,它将显示index.php中新主页的内容。所以问题是,我如何让旧的浏览器忘记它缓存的内容,并加载新的首页?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,我相信您正在寻找的是称为缓存清除的内容。这意味着您实际上是在相关的CSS / JS文件中添加了幻影/鬼影字符串。所谓相关,是指您希望随着时间的流逝而进行更改的文件。

请记住,对于用户来说,缓存是一种健康的功能,因为一旦用户加载了内容,缓存就会使您的网站更快。因此,您应该仔细考虑要将缓存清除添加到的文件。 Fx。无需将缓存清除添加到您以后将不会对其进行更改的静态库中。

以下是缓存清除的示例:

<script src="/js/example.js<?php echo '?'.date('Y-m-d H:i:s'); ?>" type="text/javascript"></script>

<link href="/css/example.css<?php echo '?'.date('Y-m-d H:i:s'); ?>" rel="stylesheet">

您将在这里注意到的是,我正在将PHP date函数连接到我的JS和CSS示例中。日期功能可打印当前日期,小时,分钟和秒。换句话说,它不断地将名称更改为第二个。因此,浏览器无法保留文件的缓存版本,因为从技术上讲,它们在经过每秒之后就不是同一文件。

如果这不是您想要的,请让我知道,我将编辑答案。

您的问题也可能与here所解决的问题相似。