Android 上的 HTTP Header Cache-Control 似乎不起作用
Posted
技术标签:
【中文标题】Android 上的 HTTP Header Cache-Control 似乎不起作用【英文标题】:HTTP Header Cache-Control on Android does not seem to work 【发布时间】:2019-12-20 13:34:28 【问题描述】:我完全迷路了,甚至不知道该谷歌什么了,也许有人可以在这里把我推向正确的方向:
我有一个 WildFly 服务器正在运行,我对 javascript 文件做了一些更改。 一旦我将新的 .war 文件重新发布到服务器,由新 js 文件引起的更改就可以在计算机上的浏览器中看到。
然而,当我打开手机查看那里的结果时,什么也没发生。我清除了缓存,当然,现在更改出现了。在电脑和手机上,我都在使用 Chrome。
我将 HTTP 标头“Cache-Control”与“no-cache”作为值,但这并没有做任何事情。 我在 WildFly 前面使用了 nginx,但我检查了 NGINX 并没有过滤掉那个标头。
我还尝试对文件进行版本控制。 WildFly 为此提供了一个非常简洁的解决方案,如果您偶然发现这个问题,请查看this post 以了解它是如何完成的。但这对我也没有用。
有人知道这里发生了什么吗?
感谢任何帮助或 cmets!
【问题讨论】:
【参考方案1】:如果通过“Cache-Control
”清理cache
以某种方式失败,另一种解决方案是为JavaScript
文件设置新版本。例如:
<script type="text/javascript" src="script.js?v=0.01"> // any version number you want
我不太习惯WildFly Server
,但我相信您可以设置一个function
来创建一个随机数,该随机数将在每次刷新页面时用作新版本。
类似:<script type="text/javascript" src="script.js?v=random number here">
希望能给你指明方向。
【讨论】:
您好,感谢您的帮助。我忘了提到我已经这样做了。在 Wildfly 中确实有一个非常简单的方法可以做到这一点,我很快就会在问题中发布它。但是,它没有帮助。有人告诉我,在 Safari 上也是如此,但仅在移动设备上。会不会是某种数据保存的东西? 是的,可以。我不知道 Wildfly,但我知道它通过其他平台发生。【参考方案2】:这最终成为了时间问题。 手机上的浏览器最终会重新加载当前文件,从那时起更改立即可见。
带有版本号的脚本技巧就像一个魅力。标题也是如此(“Cache-Control:no-cache”)。两者一起可能非常安全。不能只用版本号来做这一切,只有包含。
感谢@Azametzin 的意见!
【讨论】:
【参考方案3】:在 android 设备(不是 Chrome Android)的某些浏览器中,并非所有浏览器都支持缓存控制,因为缓存控制仍然适用于 android 设备。部分安卓浏览器无法使用。
【讨论】:
以上是关于Android 上的 HTTP Header Cache-Control 似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章
已解决使用android-async-http网络请求框架出现Header[]不识别错误的解决办法