我如何configurationApache,以防止代理服务器caching我的网站上的特定url?

我有一个Apache服务器托pipe的clickonce资源库; 出于显而易见的原因*,我不希望这个存储库被代理服务器caching。

我知道有没有办法阻止代理caching的东西,如果愿意,但我正在寻找一种方式暗示代理不caching我的url,或提供一个“过时的date”。

有没有办法与Apache做到这一点? 如果没有,是否有可能做到这一点与另一个networking服务器(IIS?)

如果有一些选项只与某些特定的代理商合作,我也对这些选项感兴趣。


**如果存储库被caching,软件将检查其版本与“最新版本”(由代理保存)的废弃副本,而不是根据服务器上的“真实”最新版本进行检查。

这对于apache来说非常容易,例如为了确保没有任何东西来自你的服务器应该被caching,试试这个

<Location / > ExpiresActive On ExpiresDefault "now" </Location> 

您可能不想完全做到这一点,所以看看mod_expires的文档,并根据您的需要进行自定义。

另外,请记住,在这种情况下,浏览器和代理服务器是相同的。 通过发送带有禁用caching的响应的expires头文件,您将会增加运行网站的大量负载和成本,更不用说访问速度慢了。

如果您正在谈论某种types的caching引擎(例如广域网加速器),并且所涉及的设备将特殊的UserAgent附加到请求中,那么您很幸运。 在这种情况下,您可以拥有如下的规则,其中SomeString是与caching引擎的用户代理匹配的string:

 BrowserMatch SomeString no-cache-headers Header set Cache-Control "no-cache, must-revalidate" env=no-cache-headers Header set Pragma "no-cache" env=no-cache-headers Header set Expires "Sat, 1 Jan 2000 00:00:00 GMT" env=no-cache-headers 

在这里,我把“过期”标题设置为过去的任意date。

如果你正在谈论一个只是转发请求的代理,而不是自己发出请求,那么你可以做的最多的是阻止这些对象的所有caching,或者(稍微好一点)为这些对象设置一个短的生命周期对象。 你可以这样做:

 ExpiresActive On ExpiresDefault "access plus 1 hour" 

在那里你可以select你想要的时间。 或者你可以给“访问”作为expires的默认值,这意味着下一个请求应该得到一个新的对象。 但在这里,正如其他人指出的,你也是在惩罚浏览器。

您可以在HTML页面上设置“Expires”元标记,也可以通过Apache /任何服务器将其设置为一个/几个标题。 这里有一些关于这个主题的非常好的信息 。

以下是在IIS上使用ASP的方法 。

使用标题,基本上你可以设置最大年龄为1秒,例如, 无caching无存储必须重新validation标题,这是一个很好的衡量标准,因为有一些行为不当的/错误的代理,这样你确保覆盖所有的基地。

使用Apache,您需要检查mod_expires 。 大多数代理服务器都会尊重Expires HTTP头文件和max-age等。