2012-01-05 26 views
7

我正在寻找Chirpy为css/js缩小,压缩等 我注意到它没有支持缓存。它没有任何逻辑发送Expires头,ETag的,等为什么/如何浏览器知道缓存内容(HTML,CSS,JS等),当没有明确指示这样做

的这个功能的缺失让我的问题,如果缓存的内容是不是太大的关注; YSlow的!评分这个,所以我有点困惑。现在我正在研究缓存,但无法解释为什么从缓存中检索此css文件SuperFish.css

  1. 访问http://www.weirdlover.com(快活的开发者)

  2. 看初始网络跟踪。请注意,SuperFish.css没有到期标题。

    First pull

  3. 访问该网页,并再次检查网络跟踪。现在从缓存中检索SuperFish.css

    Cached image

为什么SuperFish.css从高速缓存在重新审查网页检索?即使关闭所有chrome实例然后重新访问页面,也会发生这种情况。

+0

这就是为什么你从浏览公司看到广告....他们展示所有这一切的速度,居然只来自这些缓存技术。浏览器开发者已经确定,即使服务器没有告诉它缓存也会发生。 – 2012-01-05 17:07:46

回答

4

这似乎爱上HTTP规范。

13.4 Response Cacheability

除非特别由缓存控制的约束(14.9节)指令,缓存系统总是可以存储一个成功的响应(见13.8)作为缓存条目,也可以返回它没有验证,如果它是新鲜的

13.2.2 Heuristic Expiration

由于原始服务器并不总是提供明确的到期倍,HTTP高速缓存典型地分配启发式期满时间,采用的是使用其它标头值(如上次修改时间)来估计一个合理的过期时间的算法。

它似乎没有提供一个缓存控制标题,并且放弃expires标题,客户可以自由地使用启发式来生成一个到期日期,然后根据这个缓存响应。

etag的存在对此没有影响,因为etag用于重新验证过期的缓存条目,在这种情况下,chrome认为缓存条目是新鲜的(这同样适用于上次修改),因此尚未过期。

总的原则是,如果原始服务器关注的是新鲜感,应该明确说明它。

+0

如果有人很好奇为什么请求包含Cache-Control头,但响应不包含:HTTP请求中的Cache-Control头允许客户端控制下游缓存的操作方式。在像XMLHttpRequest这样的API中,它们也可以用来控制本地(即浏览器内)缓存的运行方式。 http://www.mnot.net/javascript/xmlhttprequest/cache.html – 2012-01-05 22:19:31

+0

事实上,我试图用它来改善客户端的缓存控制,以便发现大多数浏览器不支持max-stale或max-年龄不等于max-age = 0 – 2012-01-06 00:17:29

0

在这种情况下(当服务器没有返回Expires头),浏览器应与的If-Modified-Since标题,并且如果服务器返回HTTP 304未修饰的,则浏览器从高速缓存中获取数据的HTTP请求。 但是,我看到,如今当数据在缓存中的浏览器没有做任何要求。我认为他们的行为就是为了更好的响应时间。