缓存控制:如果浏览器和客户端指定了缓存控制标头,会发生什么



我的应用程序中存在缓存控制问题。

显然,我的浏览器正在请求最大年龄为0的HTML文件。我的网络服务器没有指令,但CDN代理在24小时内传递了一个缓存指令。

问题是,例如,如果浏览器在请求中传递"无缓存",但服务器指定了缓存时间,会发生什么?优先级最高的是什么?

我可以完全忽略客户端的缓存吗?还是我总是受制于服务器的响应?

谢谢!

您混淆了请求和响应中标头的含义。

在请求报头中,MaxAge=0表示";我想要来自原始服务器的此内容的最新版本";。客户端应该能够指定一个非零值和任何版本早于该版本的代理缓存,即使它仍然被认为是有效的,也应该向上游发出新的请求,尽管HTTP/1.1规范对此有点模糊。

在响应报头中,Max Age=N表示"最大年龄";这是内容,您可以重复使用长达N秒(减去当前年龄的任何指定值(,而无需再次要求";。

没有冲突。客户端有权在缓存时间到期之前再次请求。

如果您的原始服务器没有指定最大年龄(也没有指定Expires标头(,则会出现复杂情况。它不应该那样做(除非它被明确告知这样做(。这表明代理行为不好,您应该与代理服务提供商交谈。

考虑到代理行为不好,即使客户端要求新的副本,它也可能提供过时的内容。

然而,这并不全是他们的错。如果您不希望内容是可缓存的,那么您应该在带有Cache-control: no-cache的响应标头中明确说明这一点。在没有显式缓存指令的情况下,客户端和中间缓存可以重用内容。

最新更新