jQuery的CDN和遠期過期的頭文件


Answers

整個緩存問題取決於您使用的鏈接。 我發現很多時候人們並沒有鏈接到jQuery的確切版本號。

例如,從code.jquery.com你可以引用這個文件...

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

...你會一直得到最新的jQuery副本。

或者你可以做一些類似的Google ...

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年

通過明確指出jQuery的確切版本,您希望Google發回1年的最大年齡標題。 所以你大大增加了客戶端使用緩存副本的機會。 如果新版本的jQuery帶有錯誤修復或功能,那麼只需更新鏈接即可。

這個解釋起源於BucketSoft博客

Question

為什麼從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

Google 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託管的項目比其他項目有更長的過期頭。 謝謝!