HttpCacheability.NoCache 和 Response.CacheControl = “no-cache

本文关键字:no-cache CacheControl Response NoCache HttpCacheability | 更新日期: 2023-09-27 18:33:37

下面两行有什么区别?

Response.Cache.SetCacheability(HttpCacheability.NoCache);

 Response.CacheControl = "no-cache";

HttpCacheability.NoCache 和 Response.CacheControl = “no-cache

如果您通读文档,通常没有任何区别。

但是,由于前者使用 Cache 对象(Asp.Net 4 或 Asp.Net MVC 中HttpCachePolicyBase(,因此它提供:

a( 对响应对象的缓存策略的抽象,在测试场景中很有用

b( 如果出于某种原因扩展了 HTTP 规范,这意味着NoCache在响应中需要更多的标头,或者对响应进行其他调整,则可能是面向未来的

它还允许根据客户端的功能透明地调整"不可缓存性"的概念;这在HTTP确实发展的情况下很重要 - 但在HTTP 1.0和1.1客户端的情况下也已经如此(1.0和1.1之间的差异在HTTP 1.0与1.1中得到了很好的总结(。

在第二行中,你负责如何应用no-cache指令(使用一个有点魔术的字符串( - 当然,它仍然是可测试的,但如果HTTP规范确实发生了变化,那么你必须自己编码。

最终,使用 Response.Cache 对象比直接对标头进行编码要好(例如,它确实适用于 ETags 和 If-Not-Modified-Since 处理(。

维护 Response.CacheControl 属性只是为了向后兼容。当您为其分配字符串时,它将在 Response.Cache 对象中设置相应的值。