缓存控制:私有没有过期数据意味着“立即过期”吗?

时间:2011-07-13 16:42:02

标签: asp.net caching standards cache-control

我观察到从ASP.NET提供的大多数内容只有一个Cache-Control:私有标头,没有Last-Modified或Etag标头。

我还观察到浏览器从不似乎缓存了这些内容,这是因为从未见过浏览器发出任何内容,只能发出无条件的GET请求。

我正在尝试支持这样的断言:具有Cache-Control的资源:私有且没有过期数据将被所有浏览器视为“不缓存”,但在RFC中找不到任何内容(http:/ /www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)确认或反驳。

我的断言是否正确?请引用!

1 个答案:

答案 0 :(得分:1)

W3C上有一个可以追溯到15年前的电子邮件链:http://www.w3.org/Protocols/HTTP/Issues/cache-private.html

  

(1)“缓存控制:私人”仍然像罗伊的选秀一样,但有一个   提到明确包括的可扩展性。单用户代理缓存   有效地允许忽略该指令。

     

(2)“Cache-control:no-cache”定义为完全相同   作为“缓存控制:私有”的东西,但也没有例外   用户代理缓存。

     

(3)我们添加“Cache-control:no-store”,它适用于整个   消息,可以在响应中或在请求中发送。如果发送   在请求中,它表示“不存储此请求的任何部分   或者对它的任何回应。“如果在回复中发送,则表示”不存储   这个回复的任何部分或引出它的请求。“   这适用于单用户和共享缓存。缓存应该   遵守它但我们明确警告不要将其视为隐私   机制。用户可以明确地存储此类响应   缓存系统(例如,使用“另存为”对话框。历史缓冲区可以   将这些回应存储为正常运作的一部分。

接着说:

  

“private”指令表示响应消息的一部分   适用于单个用户,除非在a中,否则不得缓存   由用户代理控制的私有(非共享)缓存。

最重要的是:

  

无论如何,它似乎是“私人”和“私人”之间的主要区别   “no-cache”是“私有”允许在用户代理中进行缓存   单用户缓存,而“无缓存”则没有。

因此,在此基础上,我将其视为不允许非私有缓存(即在代理层),但允许私有缓存 <(即在浏览器内)。我知道这只是关于规范草案的讨论,但这是迄今为止我能够找到的最佳解释。