在服务器迁移过程中,一个新的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
?
当客户端不向服务器请求新内容时,无法手动重置用户端(浏览器)上的浏览器缓存。在这种情况下,可以很有用地访问任何脚本,您可以在不使用缓存的情况下下载这些脚本。在这种情况下,您可以更改此脚本并运行强制重新加载页面(但要小心-在每次加载页面后,您需要任何标志来防止永久强制重新加载)。例如,如果你有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文件的缓存副本,即使在浏览器会话之间也是如此。当你更新这些文件之一但用户的浏览器继续使用缓存的副本时,这会导致出现问题。 问题是:强制用户浏览器在文件更改后重新加载文件的最优雅方法是什么? 理想情况下,该解决方案不会强制浏览器在每次访问页面时重新加载文件。我将发布自己的解决方案作为答案,但我很好奇是否有