Sco*_*tes 7 asp.net-mvc caching http-headers chirpy
我正在看Chirpy的css/js缩小,压缩等.我注意到它不支持缓存.它没有任何发送expires头,etags等的逻辑.
没有这个功能让我怀疑缓存内容是不是一个问题; YSlow的!这个等级让我有点困惑.现在我正在研究缓存,无法解释为什么SuperFish.css从缓存中检索这个css文件.
访问http://www.weirdlover.com(Chirpy的开发者)
查看初始网络跟踪.请注意,没有过期标头SuperFish.css.
重新访问该页面并再次检查网络跟踪.现在SuperFish.css从缓存中检索.
为什么SuperFish.css在重新访问页面时从缓存中检索到了?即使我关闭所有chrome实例然后重新访问该页面,也会发生这种情况.
这似乎符合 HTTP 规范。
除非受到缓存控制(第 14.9 节)指令的明确限制,否则缓存系统可以始终将成功的响应(参见第 13.8 节)存储为缓存条目,如果它是新鲜的,可以在不验证的情况下返回它
由于源服务器并不总是提供明确的过期时间,因此 HTTP 缓存通常会分配启发式过期时间,并采用使用其他标头值(例如上次修改时间)的算法来估计合理的过期时间。
看起来,通过不提供缓存控制标头,并省略过期标头,客户端可以自由地使用启发式方法来生成到期日期,然后根据该日期缓存响应。
etag 的存在对此没有影响,因为 etag 用于重新验证过期的缓存条目,在这种情况下,chrome 认为缓存条目是新鲜的(这同样适用于上次修改),因此它没有'还没有过期。
一般原则是,如果源服务器关心新鲜度,则应明确说明。