IIS 缓存文件从未被替换
IIS cached files never replaced
也许我的 Google 搜索措辞不正确,可能遗漏了一些信息,但我 运行 遇到了 IIS 8.5 和缓存问题。我有一个服务器设置,按照所有标准应该只提供静态文件。显然,当一个文件被更改时,应该提供新文件。问题是,即使在服务器重新启动、将文件设置为立即过期、禁用缓存、禁用压缩并关闭任何其他缓存功能后,仍会提供具有旧时间戳的旧文件。
我有以下设置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering allowHighBitCharacters="false">
<verbs allowUnlisted="false">
<add verb="GET" allowed="true" />
</verbs>
</requestFiltering>
</security>
<caching enabled="false" enableKernelCache="false" />
<urlCompression doStaticCompression="false" />
</system.webServer>
<location path="" overrideMode="Deny">
<system.webServer>
</system.webServer>
</location>
<location path="" overrideMode="Allow">
<system.webServer>
</system.webServer>
</location>
</configuration>
文件所在的文件夹具有只读权限。有趣的事实是,如果我转到 mydomain.com,会显示旧版本,但转到新 mydomain.com 会加载新文件(即使它们都指向相同的 IP 地址)。
如果与响应一起发送的缓存控制 header(s) 指示内容在给定时间段内不会更改,则 HTTP 客户端可以使用文件的旧版本。内容是否在服务器上更改并不重要。
例如,如果文件与 header 一起发送:
Cache-Control: Max-age=86400
然后客户端可以在 24 小时内使用该文件而无需联系服务器。如果服务器上的文件发生变化,客户端不会知道文件发生了变化,因为它甚至不会向服务器发出请求。
您可以添加 must-revalidate
缓存控制属性以强制客户端始终发出服务器请求。
正如我在对 storsoc 的回复中指出的那样,我们的问题是我们的负载平衡器(一台 F5 服务器)正在尝试通过缓存我们的站点来尽可能多地从我们的 Web 服务器卸载。有关如何强制删除缓存条目的信息,请参阅 K13255: Displaying and deleting HTTP cache entries from the command line (11.x and later)。
也许我的 Google 搜索措辞不正确,可能遗漏了一些信息,但我 运行 遇到了 IIS 8.5 和缓存问题。我有一个服务器设置,按照所有标准应该只提供静态文件。显然,当一个文件被更改时,应该提供新文件。问题是,即使在服务器重新启动、将文件设置为立即过期、禁用缓存、禁用压缩并关闭任何其他缓存功能后,仍会提供具有旧时间戳的旧文件。
我有以下设置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering allowHighBitCharacters="false">
<verbs allowUnlisted="false">
<add verb="GET" allowed="true" />
</verbs>
</requestFiltering>
</security>
<caching enabled="false" enableKernelCache="false" />
<urlCompression doStaticCompression="false" />
</system.webServer>
<location path="" overrideMode="Deny">
<system.webServer>
</system.webServer>
</location>
<location path="" overrideMode="Allow">
<system.webServer>
</system.webServer>
</location>
</configuration>
文件所在的文件夹具有只读权限。有趣的事实是,如果我转到 mydomain.com,会显示旧版本,但转到新 mydomain.com 会加载新文件(即使它们都指向相同的 IP 地址)。
如果与响应一起发送的缓存控制 header(s) 指示内容在给定时间段内不会更改,则 HTTP 客户端可以使用文件的旧版本。内容是否在服务器上更改并不重要。
例如,如果文件与 header 一起发送:
Cache-Control: Max-age=86400
然后客户端可以在 24 小时内使用该文件而无需联系服务器。如果服务器上的文件发生变化,客户端不会知道文件发生了变化,因为它甚至不会向服务器发出请求。
您可以添加 must-revalidate
缓存控制属性以强制客户端始终发出服务器请求。
正如我在对 storsoc 的回复中指出的那样,我们的问题是我们的负载平衡器(一台 F5 服务器)正在尝试通过缓存我们的站点来尽可能多地从我们的 Web 服务器卸载。有关如何强制删除缓存条目的信息,请参阅 K13255: Displaying and deleting HTTP cache entries from the command line (11.x and later)。