2015-04-16 28 views
0

也许我错过了一些不正确的措辞我的谷歌搜索,但我遇到了IIS 8.5和缓存问题。我有一个服务器设置,所有标准应该只提供静态文件。显然,当一个文件被改变时,新的文件应该被提供。问题是,即使在服务器重新启动,设置文件立即过期,禁用缓存,禁用压缩以及关闭任何其他缓存功能之后,具有旧时间戳的旧文件仍在服务中。IIS缓存的文件永远不会被替换

我有以下设置:

<?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,旧版本显示,但去newmydomain.com加载新文件(即使他们都指向相同的IP地址)。

回答

1

如果随响应一起发送的缓存控制头指示内容在给定时间段内不会改变,则HTTP客户端可以使用旧版本的文件。内容在服务器上是否更改并不重要。

例如,如果文件与所述头中发送:

Cache-Control: Max-age=86400 

然后进行24小时的客户端可以使用该文件,而不联系服务器。如果文件在服务器上发生变化,客户端将不知道该文件已更改,因为它甚至不会向服务器发送请求。

您可以添加must-revalidate缓存控制属性来强制客户端始终发出服务器请求。

+0

当清除浏览器的缓存,删除本地离线临时文件并强制IE始终刷新服务器仍然导致旧页面时,我感到兴趣盎然。即使在尝试清除所有副本的计算机后,文件是否可能存储在本地?另外,26%的流量都是IE浏览器,46%是Chrome浏览器,并且都没有加载新内容。 – Nielsvh

+1

我也见过这个 - 服务器出于某种原因没有意识到文件已经改变。我不得不重新启动服务器。 –

+0

我的浏览器和打开缓存的页面之间有负载平衡器。一旦他们的页面缓存被删除,一切就会结束。 – Nielsvh

相关问题