簡體   English   中英

HTTP緩存:為什么使用ETag而不是Cache-Control和/或Expires?

[英]HTTP Caching: Why use ETag instead of Cache-Control and/or Expires?

當我注意到jQuery的Media Temple ProCDN支持的庫http : //code.jquery.com/jquery-1.7.1.min.js並不支持 HTTP時,我一直在自己的網站上閱讀有關HTTP瀏覽器緩存的信息,並在其上進行試用。遵循Google的緩存最佳做法

我認為,瀏覽器端緩存有兩種類型:

  1. 過期和緩存控制:最大壽命。

    這些被認為是“無條件使用的'強緩存頭';也就是說,一旦設置了頭並下載了資源,瀏覽器將不會發出任何對資源的GET請求,直到達到到期日期或最長使用期限。”

  2. 最后修改和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人員的配置錯誤?

嗯,我會解決這個問題,但是請謹指出,這可能不是解決此類問題的最佳地點,因為這並不是一個真正的問題? (也許?但是什么)

實際上,我們現在不使用proCDN-我們使用的是舊版本,它不允許我們自定義任何內容:/但是! 好消息! 他們為我們提供了一些新的東西,procdn(也有一些統計/跟蹤的東西,這將很整潔)和一些更快的盒子,因此我們應該能夠更好地進行緩存-因為您是對的,這是現在不是那么好。 另外,我們不能執行任何自定義標頭或類型,也不能執行任何操作,有時候這樣做很不錯。

聽起來您已經對此進行了很多研究-如果您想提供幫助來修復某些設置中的某些內容,有時可以進入#jquery-dev(對我來說是相同的用戶名),因為您似乎知識淵博,並且有興趣幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM