ASP.NET Response.Cache.SetNoStore()与Response.Cache.SetNoServerCaching()的比较

ASP.NET Response.Cache.SetNoStore()与Response.Cache.SetNoServerCaching()的比较,asp.net,caching,akamai,Asp.net,Caching,Akamai,任何人都可以在HTTP级别分解这两种方法的功能 我们正在处理Akamai边缘缓存,并被告知SetNoStore()将导致can排除,因此(例如)表单页面将始终发回原始服务器。根据{guy}设置HTTP头: Cache-Control: "no-cache, no-store" 在对表单实施此更改时,我发现SetNoServerCaching()。从语义上讲,这似乎更有意义,并且声明“明确拒绝在源服务器上缓存文档。” 所以我去海边看我能看到什么。我尝试了这两种方法,并查看了Firebug和Fid

任何人都可以在HTTP级别分解这两种方法的功能

我们正在处理Akamai边缘缓存,并被告知SetNoStore()将导致can排除,因此(例如)表单页面将始终发回原始服务器。根据{guy}设置HTTP头:

Cache-Control: "no-cache, no-store"
在对表单实施此更改时,我发现SetNoServerCaching()。从语义上讲,这似乎更有意义,并且声明“明确拒绝在源服务器上缓存文档。”

所以我去海边看我能看到什么。我尝试了这两种方法,并查看了Firebug和Fiddler中的标题

从我所知道的,这两个方法设置了完全相同的Http头


有人能解释一下这些方法之间是否有实际的区别吗?如果有,http响应中隐藏了什么

两者的区别是

HttpCachePolicy.SetNoStore()或Response.Cache.SetNoStore: 阻止浏览器缓存ASPX页面

HttpCachePolicy.SetNoServerCaching或Response.Cache.SetNoServerCaching: 停止当前响应的所有源服务器缓存。明确拒绝在源服务器上缓存文档。设置后,将完全处理对文档的所有请求


调用这些方法时,无法为当前响应重新启用缓存

SetNoStore基本上停止浏览器(以及任何网络资源,如CDN)保存响应或请求的任何部分,包括保存到临时文件。这将设置

SetNoServerCaching将从本质上阻止服务器保存文件,在ASP.NET中,可以进行几种级别的缓存:仅数据、部分请求、完整页面和SQL数据。此调用应停止保存在服务器上的HTTP(完整和部分)请求。此方法不应设置缓存控制头或无存储或无缓存

还有

Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetMaxAge(new TimeSpan(1, 0, 0));
作为设置缓存的一种可能方式,这将设置content expires标头


对于CDN,您可能需要设置content expires头,以便CDN知道何时获取新内容,并在它被命中时通知它。您可能不希望没有缓存或没有存储,因为这会导致每次命中都会重新蚀刻,因此基本上您是在抵消CDN给您带来的任何好处,除非他们与最终用户的主干连接可能比您当前的ISP更快,但这是微不足道的

谢谢,这是对它们“意思”的一个很好的解释,但我正在寻找它们“做什么”的解释,即为什么两种方法都将缓存控制头设置为完全相同的值:“无缓存,无存储”?语义上(作为.NET Framework抽象),SetNoStore似乎是停止CDN/edge缓存(作为某种中间件“客户端”)的正确选项,而SetNoServerCaching仅指源服务器(IIS/ASP.NET)缓存。我在设置中检查了它,它没有为SetNoStore设置任何缓存,也没有为SetNoStore设置任何存储,只为SetNoStore设置任何缓存。您使用的是哪个版本的.NET?有趣的是,此标题可能是在应用程序(.NET 4.0,Sitecore 6.1)的其他地方设置的。我可能会做一些进一步的调查。在极端情况下,如果您不能简单地控制请求生命周期,您可以,同样地
SetNoServerCaching