6

问题

为什么从 jQuery 的 CDN 提供的内容缺少远期过期标头?(或者,“我在这里做错了什么?”)

背景

我在一个 Web 项目中使用 jQuery 和 jQuery Mobile。为了提供这些脚本,我根据他们的指导使用 jQuery 的 CDN 。但是,我注意到这些资源在没有远期过期标头的情况下提供,这会阻止浏览器智能地缓存它们。

尽管 jQuery 服务器会以 响应304 Not Modified,但这与完全否定该请求的过期标头不同。我意识到这里的简单答案是“因为他们没有”但是,我想知道他们为什么不这样做,如果有某种方式我可以提供这些内容,最好是来自 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

谷歌 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

请注意遥远的未来到期日期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 托管项目的过期标头比其他项目长。谢谢!

4

2 回答 2

12

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

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

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

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

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

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

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

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

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 年)

通过明确说明您希望 Google 发送回 1 年的 max-age 标头的确切版本的 jQuery。因此,您大大增加了客户端仅使用缓存副本的机会。如果新版本的 jQuery 带有错误修复或您真正想要的功能,那么只需更新您的链接。


这个解释来源于BucketSoft 博客

于 2012-05-16T00:31:11.057 回答
4

微软也有一个 CDN 托管 jquery 移动的东西:

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

Expire-Date 是未来 1 年左右!

于 2012-07-03T15:21:19.670 回答