IIS 7.5 中的缓存控制标头

IIS 7.5 中的缓存控制标头

我正在尝试理解客户端(Web 浏览器)缓存以及它与 IIS 7.5 缓存控制标头的关系。

尤其:

  1. 如果我们要强制客户端重新加载缓存资源,IIS 必须如何配置?

  2. 如果服务器上的资源具有较新的修改日期(或 ETag 值),我们是否需要立即设置过期网页内容?

  3. 目前我们没有设置任何缓存标头。因此,如果我将缓存标头设置为 no-cache(我认为这相当于立即使 Web 内容过期),这会强制 Web 浏览器获取特定文件的新版本吗?或者浏览器仅在认为其当前副本过时后才请求新版本,然后从那时起不再缓存它?

最佳做法是将缓存控制标志设置为 1 周,然后在我知道要进行更改的 8 天前将缓存控制设置为例如 30 分钟?

但是如果我这样做了,然后又需要立即使用户缓存中的某个项目过期,因为它存在问题,我该怎么做呢?

答案1

理解客户端/用户代理缓存的一种方法是将浏览器视为为自己实现的中间缓存(事实上它确实实现了,由 解决Cache-Control: private)。这将所有术语抽象为简单的请求和响应模式,并且在大多数情况下,浏览器缓存的行为与代理或中间缓存相同。在阅读 IETF RFC 2616 中有关该主题的权威文档时,记住这一点会很有帮助:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

  1. 将“Expires”标头设置为“立即”(发送Cache-Control: no-cache),如中所述http://technet.microsoft.com/en-us/library/cc770661(v=ws.10).aspxhttp://msdn.microsoft.com/en-us/library/ms689443(v=vs.90).aspx

  2. 不。如果您不发送任何 Cache-Control 标头,IIS 应该发送资源的最新版本,并且客户端应该从 Last-Modified 标头或 ETag 中识别该版本。

  3. 你的第一个说法是正确的:发送no-cache将指示客户端每次都请求资源,即使它已经缓存了它。有些客户端行为不当,无论如何都会缓存此类资源,但你也可以使用它must-revalidate来确保它获得最新的副本

至于最佳实践,缓存时间取决于您的应用程序和用户的需求。您可以随时发送邮件Cache-Control: must-revalidate来解决上述问题,因此无需全局更改缓存过期时间。

相关内容