代码之家  ›  专栏  ›  技术社区  ›  Digital Ninja

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

  •  1
  • Digital Ninja  · 技术社区  · 7 年前

    我看到了很多关于强制缓存重新加载的答案,并推荐了一个包含HTML页面本身的解决方案。

    但是当你的旧网站被写成 index.html

    以前的网站 索引.html nginx 的配置),我现在已将其更改为 index.php . 但每当我从以前访问过它的浏览器中访问它时,它仍然会打开缓存的旧文件 索引.html 索引.php 正确地。

    我找到的一个看似正确的答案是 nginx公司 设置 expires -1; 对于 server {} 节,这将强制缓存失效;但由于某种原因,这不起作用。

    当然,需要做的是,访问者总是会得到新页面,而不必自己显式地发出刷新。

    大概解决方案应该是通过标头使缓存失效。但是怎么做呢?

    编辑所有建议的评论和答案

    1. 就像我在回答的第一段所说的,这个问题不是通过编辑索引文件(比如添加“缓存破坏”的参数)来解决的,因为索引文件本身已经被缓存了,这就是问题所在。
    2. 已缓存的文件。
    3. 存在 索引.php 不会产生冲突。整个系统工作正常,只有以前访问过页面的老访问者才能返回 被设置为服务器配置中的索引页,仍然可以获取缓存的 索引.html 即使索引已更改为 索引.html 文件已完全删除。因为一旦浏览器缓存了一个HTML文件,它就不再向服务器询问索引文件是什么,它只会显示它缓存了什么。

    所以完整的场景是这样的:

    1. 网站上有 设置为服务器配置中的索引页
    2. 浏览器访问网站
    3. 浏览器缓存主页
    4. 服务器配置中的索引页将更改为
    5. 同一个浏览器访问该网站
    6. 索引.html 从以前

    . 所以问题是,如何让旧浏览器忘记缓存的内容,并加载新的主页?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Martin    7 年前

    如果我对你的问题理解正确,我相信你要找的是一种叫做 . 这意味着,您实际上是在相关的CSS/JS文件中添加了一个幻像/幻影字符串。我所说的相关文件是指您希望在一段时间内对其进行更改的文件。

    请记住,缓存对用户来说是一项健康的功能,因为一旦用户加载了一次内容,它会使您的网站速度更快。因此,您应该仔细考虑要将缓存破坏添加到哪些文件中。外汇。不需要将缓存破坏添加到静态库中,您以后不会对这些库进行更改。

    缓存破坏的示例如下:

    <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示例中。date函数打印当前日期、小时、分钟和秒。换句话说,它不断地把名字改成第二个。因此,浏览器不可能保留文件的缓存版本,因为在每过一秒之后,这些文件在技术上不是同一个文件。

    如果这不是你想要的,具体来说,让我知道,我会编辑我的答案。

    你的问题也可能类似于已经解决和回答的问题 here