当前位置: 首页 > 知识库问答 >
问题:

nginx缓存索引。html强制重新加载

蒋嘉实
2023-03-14

在服务器迁移过程中,一个新的nginx配置缺少缓存控制指令。因此,我们最终得到了缓存的index.html,这对我们的SPA非常不利,如果我们部署新代码,它将不再刷新。我们需要index.html不被缓存。

这是我们的(不好的)nginx配置,几天来一直在线:

server {
  listen 80;

  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }

  error_page   500 502 503 504  /50x.html;

  location = /50x.html {
    root   /usr/share/nginx/html;
  }

}

我们修复了我们的配置:

server {
  listen 80;

  root /usr/share/nginx/html;

  location / {
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
    add_header Cache-Control "no-store, no-cache, must-revalidate";
  }

  location ~* \.(js|jpg|jpeg|gif|png|svg|css)$ {
    add_header Cache-Control "max-age=31536000, public";
  }

  error_page   500 502 503 504  /50x.html;

  location = /50x.html {
    root   /usr/share/nginx/html;
  }

}

问题

过去几天内访问过我们网页的客户端缓存了一个旧索引。html。我们如何强制他们的浏览器删除缓存的索引。html

共有1个答案

从劲
2023-03-14

当客户端不向服务器请求新内容时,无法手动重置用户端(浏览器)上的浏览器缓存。在这种情况下,可以很有用地访问任何脚本,您可以在不使用缓存的情况下下载这些脚本。在这种情况下,您可以更改此脚本并运行强制重新加载页面(但要小心-在每次加载页面后,您需要任何标志来防止永久强制重新加载)。例如,如果你有GTM在现场-这可以帮助。

UPD:我不是js专家,但是你需要在所有页面上添加GTM标签,比如这个js-cript:

function getCookie(name) {
  let matches = document.cookie.match(new RegExp(
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
  ));
  return matches ? decodeURIComponent(matches[1]) : undefined;
}

was_reloaded = getCookie('was_reloaded')
alert(was_reloaded)
if (was_reloaded != 'yes') {
        document.cookie = "was_reloaded=yes; path=/; max-age=3600;"
    location.reload();
} }
 类似资料:
  • 我正在尝试强制缓存这类文件:css、woff、otf、js、jpg、jpeg、gif、png、ico、cur、gz、svg、svgz、mp3、mp4、ogg、ogv和没有扩展名的文件。 获取: 接受:text/css,/;q=0.1 接受编码:gzip,deflate,br 接受语言:es-ES,ES;q=0.8,EN-US;q=0.5,EN;q=0.3 缓存-控制:无缓存 连接:保持活动状态 D

  • 我试图将我的项目设置为在jUnit模式下使用Spring hibernate和Spring hibernate JTA(Glassfish)的缓存(ehache)。 这里是我的junit的spring hiberrnate配置 我用@缓存注释了一些实体(我想要缓存的唯一实体) 我设置了一些查询:setCacheable(true)。 我有一个对象(名为CacheMap)带有@PostConstru

  • 问题内容: 我想确保通过AJAX调用请求的数据是新鲜的,而不是被缓存的。为此,我发送标题 但是如果用户按下F5键,我的Chrome版本33会覆盖此标头。 例。将内容与您的网络服务器放在一起 在网络标签上的Chrome调试器中,我看到了test.html AJAX调用。状态代码200。现在按F5重新加载页面。最长寿命:0,状态码304未修改。 Firefox表现出类似的行为。只是覆盖了请求标头,它会

  • 问题内容: 我正在使用未从HTTP请求调用的进程中的Django数据库模型。该过程应该每隔几秒钟轮询一次新数据并对其进行一些处理。我有一个循环,它hibernate了几秒钟,然后从数据库中获取所有未处理的数据。 我看到的是,在第一次获取之后,该进程再也看不到任何新数据。我进行了一些测试,尽管每次我都在构建新的QuerySet,但看起来Django正在缓存结果。为了验证这一点,我从Python sh

  • 问题内容: 问题: 当我两次运行相同的go测试时,第二次运行根本没有完成。结果是第一次运行时的缓存结果。 链接 我已经检查过https://golang.org/cmd/go/#hdr- Testing_flags, 但是没有cli标志用于此目的。 题: 是否有可能强制执行测试以始终运行测试而不缓存测试结果。 问题答案: 测试标志docs中描述了一些选项: :使所有测试结果失效 在测试运行中使用不

  • 问题内容: 我注意到一些浏览器(特别是Firefox和Opera)非常热衷于使用.css和.js文件的缓存副本,即使在浏览器会话之间也是如此。当你更新这些文件之一但用户的浏览器继续使用缓存的副本时,这会导致出现问题。 问题是:强制用户浏览器在文件更改后重新加载文件的最优雅方法是什么? 理想情况下,该解决方案不会强制浏览器在每次访问页面时重新加载文件。我将发布自己的解决方案作为答案,但我很好奇是否有