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 来创建一个随机数,该随机数将在每次刷新页面时用作新版本。

类似:&lt;script type="text/javascript" src="script.js?v=random number here"&gt;

希望能给你指明方向。

【讨论】:

您好,感谢您的帮助。我忘了提到我已经这样做了。在 Wildfly 中确实有一个非常简单的方法可以做到这一点,我很快就会在问题中发布它。但是,它没有帮助。有人告诉我,在 Safari 上也是如此,但仅在移动设备上。会不会是某种数据保存的东西? 是的,可以。我不知道 Wildfly,但我知道它通过其他平台发生。【参考方案2】:

这最终成为了时间问题。 手机上的浏览器最终会重新加载当前文件,从那时起更改立即可见。

带有版本号的脚本技巧就像一个魅力。标题也是如此(“Cache-Control:no-cache”)。两者一起可能非常安全。不能只用版本号来做这一切,只有包含。

感谢@Azametzin 的意见!

【讨论】:

【参考方案3】:

android 设备(不是 Chrome Android)的某些浏览器中,并非所有浏览器都支持缓存控制,因为缓存控制仍然适用于 android 设备。部分安卓浏览器无法使用。

【讨论】:

以上是关于Android 上的 HTTP Header Cache-Control 似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

关于Http请求header之Referer讲解

CA 颁发的仅信任特定证书 - Android

android中受信任的CA列表?

已解决使用android-async-http网络请求框架出现Header[]不识别错误的解决办法

已解决使用android-async-http网络请求框架出现Header[]不识别错误的解决办法

nginx缓存和自定义header