jquery – HTTP缓存:为什么使用ETag而不是Cache-Control和/或Expires?

当我注意到jQuery的
Media Temple ProCDN backed library
http://code.jquery.com/jquery-1.7.1.min.js不遵循谷歌的
caching best practices时,我一直在读约
HTTP browser caching并在我自己的网站上玩它.

差不多(我认为),有两种类型的浏览器端缓存:

>过期和缓存控制:max-age.

这些被认为是无条件应用的“强大缓存标头”;也就是说,一旦设置它们并下载资源,浏览器就不会发出任何资源的GET请求,直到达到到期日期或最大年龄.“
> Last-Modified和ETag

这些都提供了各种缓存,但Last-Modified遵循特定于浏览器的启发式方法,并且ETag需要更多的HTTP请求,尽管在返回304 Not-Modified时它们可以很轻.无论如何,这两者都可能涉及更多的GET请求.

静态jQuery版本永远不会改变.所以我认为应该有一个远期的Expires标题.更重要的是,这样一个可以在许多站点上使用的资产理想情况下不需要新的GET请求(即使它对于检查ETag有效性来说很小).

似乎只使用了ETag,没有Cache-Control或Expires标头:

Status: HTTP/1.1 200 OK
Accept-Ranges:  bytes   
Content-Type:   application/x-javascript; charset=utf-8 
Date:   Mon, 05 Dec 2011 19:45:57 GMT   
ETag:   "9e69008-16eac-5177b900"    
Last-Modified:  Tue, 22 Nov 2011 02:11:16 GMT   
Server: ECS (fra/D59E)  
Vary:   Accept-Encoding 
X-Cache:    HIT 
Content-Length: 93868   
Connection: close

来自:http://web-sniffer.net/?url=http%3A%2F%2Fcode.jquery.com%2Fjquery-1.7.1.min.js

那么有没有理由不设置远期的Expires标头或使用Cache-Control来实现这样的情况?我在这里误读了什么吗?或者这是jQuery人员的错误配置?

最佳答案 ehc,我会谈谈这个问题,但请注意,这可能不是发表此类问题的最佳场所,因为这不是一个真正的问题吗? (也许?但是whatevs)

实际上,我们现在还没有使用proCDN – 我们使用的是那个不让我们自定义的旧版本:/但是!好消息!他们用一些新东西把它们挂起来,procdn(它有一些统计/跟踪的东西也会有点整洁)和一些更快的盒子所以我们应该能够让我们的缓存更好 – 因为你是对的,它是现在不是很好.此外,我们不能做任何自定义标题或类型或任何东西,这有时很好.

听起来你已经对此进行了大量的研究 – 如果你想提供你的帮助来修复这些设置的某些东西,那么有时会弹出#jquery-dev(对我而言是相同的用户名),因为你看起来知识渊博,有兴趣帮忙:)

点赞