jQuery的CDN和Far-Future Expire Headers

Jef*_*eff 6 jquery jquery-mobile

为什么jQuery的CDN提供的内容缺乏远期的过期标题?(或者,"我在这里做错了什么?")

背景

我在web项目中使用jQuery和jQuery Mobile.为了服务这些脚本,我按照他们的指示使用jQuery的CDN .但是,我注意到这些资源是在没有远期过期标头的情况下提供的,这会阻止浏览器智能地缓存它们.

虽然jQuery服务器会响应304 Not Modified,但这与expire头不同,否则完全否定了该请求.我意识到这里的简单答案是"因为他们没有",但是,我想知道为什么他们不这样做,如果有某种方式我可以提供这些内容,理想情况下来自CDN,具有远期未来的过期标题.

谢谢你的时间.

例子

jQuery CDN

http://code.jquery.com/jquery-1.6.4.min.js

响应:

HTTP/1.1 304 Not Modified
Date: Wed, 16 May 2012 00:05:27 GMT
ETag: "9e68e84-16615-6ad9bfc0+gzip"
Last-Modified: Mon, 12 Sep 2011 22:55:03 GMT
Server: ECS (dca/532A)
Vary: Accept-Encoding
X-Cache: HIT
Run Code Online (Sandbox Code Playgroud)

谷歌CDN

https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js

响应:

HTTP/1.1 200 OK
age:134505
cache-control:public, max-age=31536000
content-encoding:gzip
content-length:32103
content-type:text/javascript; charset=UTF-8
date:Mon, 14 May 2012 10:45:15 GMT
expires:Tue, 14 May 2013 10:45:15 GMT
last-modified:Mon, 02 Apr 2012 18:24:28 GMT
server:sffe
status:200 OK
vary:Accept-Encoding
version:HTTP/1.1
x-content-type-options:nosniff
x-xss-protection:1; mode=block
Run Code Online (Sandbox Code Playgroud)

请注意远期到期日期 expires:Tue, 14 May 2013 10:45:15 GMT

我正在使用Microsoft的CDN托管版本,该版本具有1年到期日期:

http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.1.0/jquery.mobile-1.1.0.min.js

CDN托管文件的完整列表.

@zuul在下面解释了为什么一些CDN托管项目的标题比其他项目更长.谢谢!

Zuu*_*uul 11

整个缓存问题取决于您使用的链接.我观察到,人们常常没有链接到jQuery的确切版本号.

例如,从code.jquery.com您可以引用此文件...

http://code.jquery.com/jquery-latest.min.js

...并且您将始终获得jQuery的最新副本.

或者你可以从谷歌那里做类似的事......

http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

来自Google的那个将获得最新版本,假设它以"1"开头.问题是,当您使用这些引用时,您不会在缓存控制头中设置远期到期日期.因此,用户的浏览器将过于频繁地检查更新,从而减慢网站的加载时间.

事实上,这是几个选项及其到期设置的细分......

http://code.jquery.com/jquery-latest.min.js (无缓存)

http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js(1 小时)

http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js(1 小时)

http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js(1年 )

通过明确说明jQuery的确切版本,您希望Google发回一年的最大年龄标头.因此,您大大增加了客户端只使用缓存副本的机会.如果新版本的jQuery附带了您真正想要的错误修复或功能,那么只需更新您的链接即可.


此解释源自BucketSoft Blog

  • @Jeff,对不起,不知道有什么.但请继续关注[此页](https://developers.google.com/speed/libraries/devguide?hl=zh-CN#Libraries),它会列出Google的CDN库!(据我所知,谷歌是一个有很长失效日期的提供商) (2认同)

小智 4

微软还有一个 CDN 来托管 jquery 移动内容:

http://www.asp.net/ajaxLibrary/CDNjQueryMobile110.ashx

到期日大约是未来一年!