ASP.NET Response.Cache.SetNoStore() 和 Response.Cache.SetNoServerCaching() 的区别

7

请问有人能够解释一下这两种方法在HTTP层面上的作用吗?

我们正在处理Akamai边缘缓存,并被告知SetNoStore()将导致排除,以便于(例如)表单页面始终会向源服务器提交。根据{guy}的说法,这会设置HTTP头:

Cache-Control: "no-cache, no-store"

当我实现对我们表单的更改时,我发现了SetNoServerCaching()。这个方法在语义上似乎更有意义,而且文档中说“明确拒绝在源服务器上缓存文档”。
所以我去海边看看,试了这两种方法并在Firebug和Fiddler中查看了头文件。
从我所看到的来看,这两种方法设置了完全相同的Http头。
有人能解释一下这些方法之间是否有实际区别,如果有的话,它们在http响应中隐藏在哪里?!
2个回答

7

有几个不同之处,

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

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

还有其他的。

Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetMaxAge(new TimeSpan(1, 0, 0));

作为一种可能的缓存设置方式,这将设置content-expires标头。
对于CDN,您可能希望设置content-expires标头,以便CDN知道何时获取新内容,如果它获得HIT。您可能不希望使用no-cache或no-store,因为这将导致每次HIT都重新获取数据,实际上您抵消了CDN带来的任何好处,除非他们与最终用户之间的联接比您当前的ISP更快,但那只会是微不足道的。

谢谢,这是一个很好的解释它们的“意思”,但我正在寻找它们“做什么”的解释——即为什么两种方法都将Cache-Control头设置为完全相同的值:“no-cache,no-store”?从语义上讲(作为.NET Framework抽象),SetNoStore似乎是停止CDN /边缘缓存(作为中间件“客户端”)的正确选项,而SetNoServerCaching仅涉及源服务器(IIS / ASP.NET)缓存。 - misteraidan
我在我的设置中检查了它,它没有为SetNoSeo urverCaching设置no-cache、no-store,只为SetNoStore设置了。你使用的.NET版本是什么? - John Mitchell
有趣的是,在应用程序的其他地方(.NET 4.0,Sitecore 6.1)可能设置了此标题。我可能需要进行进一步的调查。 - misteraidan

6

两者之间的区别在于

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

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

当调用这些方法时,不能重新启用当前响应的缓存


您可以通过反射还原SetNoStore,并在极端情况下,例如您无法简单地控制请求生命周期时,类似地还原 SetNoServerCaching - SliverNinja - MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接