我有一个客户,他拥有一个这样的 ISP,它实施了缓存以加快客户的网页浏览速度。这导致他在我们的开发人员更新了最新的 EXE 之后没有从我们的 NGINX 服务器下载该 EXE。有没有办法可以拦截来自我们的 NGINX 的 EXE 请求并实施缓存破坏标头?
NGINX 版本 1.14.0
Ubuntu Server 版本 18.04.2
答案1
据我所知,没有缓存破坏标头。
您只能控制缓存的生命周期,当然,这是通过Cache-Control
。您可以指示客户端在此或该时间内缓存您的 EXE,或者根本不缓存。
你没有发送给客户端的神奇标头,这些客户端已被指示在定义的时间内缓存资产,以便让它们停止使用缓存的版本。它们不会咨询你的服务器如果他们目前有一个该资源的有效缓存条目。
如果你无法承担更改 URL(这是标准的缓存破坏做法)的费用,那么你的选择要么是使用非常短暂的缓存,要么根本没有缓存:
location ~ \.exe {
expires -1;
}
这将导致Cache-Control: no-cache
。
答案2
- 标头是一种建议,而不是保证。chaches 可能会忽略标头。标准可能会说“一定不能”,但不是每个人都会遵守标准:特别是如果他们可以省钱的话。
我看到两种可能的解决方案:
在 URL 路径或 EXE 的文件名中使用版本号比缓存控制标头更可靠,因为缓存会将新版本视为不同的资源。
HTTP 并不安全,您的客户可能容易受到 MITM 攻击(恶意软件攻击)。使用 HTTPS 提供文件既可以阻止大多数缓存,又可以防止 MITM 攻击。
然而,在客户端信任第三方来缓存其 HTTPS 流量(并安装第三方根证书来促进这一点)的情况下,需要第一个解决方案:为每个版本使用唯一的 URL。
改变下载 URL 的问题可以通过使用 HTTP POST 请求打开的下载页面来解决,因为没有任何东西可以缓存 POST 响应。