6

谁能在 HTTP 级别分解这两种方法的作用。

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

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

当我对表单实施此更改时,我发现了 SetNoServerCaching()。好吧,这在语义上似乎更有意义,并且文档说“明确拒绝在原始服务器上缓存文档”。

于是我就下海去海海看看我能看到看到的。我尝试了这两种方法并查看了 Firebug 和 Fiddler 中的标题。

据我所知,这两种方法都设置了完全相同的 Http Header。

谁能解释这些方法之间是否存在实际差异,如果有,http响应中隐藏在哪里?!

4

2 回答 2

6

有几点不同,

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

SetNoServerCaching,将实质上阻止服务器保存文件,在 ASP.NET 中可能发生的缓存有几个级别,Data only、Partial Requests、Full Pages 和 SQL Data。此调用应停止保存在服务器上的 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 更快但这将是微不足道的。

于 2011-11-25T22:56:07.153 回答
5

两者的区别在于

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

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

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

于 2011-11-25T04:44:41.703 回答