指定緩存驗證工具 (Specify a cache validator)所有的靜態(tài)資源都至少有一個Last-Modified或者Etag報頭,,這會使得瀏覽器可以優(yōu)先處理緩存而獲得性能上的提升。關(guān)于Last-Modified或者Etag,,可參看以下內(nèi)容,。 當瀏覽器第一次請求某URL時,服務(wù)器返回200狀態(tài)碼,,同時有一個Last-Modified的屬性標記此文件在服務(wù)器端最后被修改的時間,,格式 類似這樣:Last-Modified: Mon, 1 Jan 2001 12:00:00 GMT??蛻舳说诙握埱蟠薝RL時,,瀏覽器會向服務(wù)器傳送 If-Modified-Since 報頭,詢問該時間之后文件是否有被修改過:If-Modified-Since: Mon, 1 Jan 2001 12:00:00 GMT,。如果服務(wù)器端的資源沒有變化,,則自動返回 HTTP 304狀態(tài)碼(Not Changed),內(nèi)容為空,這樣就節(jié)省了傳輸數(shù)據(jù)量,。當服務(wù)器端代碼發(fā)生改變或者重啟服務(wù)器時,,則重新發(fā)出資源,返回和第一次請求時類似,。從而保證不向 客戶端重復(fù)發(fā)出資源,,也保證當服務(wù)器有變化時,客戶端能夠得到最新的資源,。 HTTP 協(xié)議規(guī)格說明定義ETag為“被請求變量的實體值”,。 服務(wù)器在HTTP響應(yīng)頭中將其傳送到客戶端,以下是服務(wù)器端返回的格式:ETag: "50b1c1d4f775c61:df3",,客戶端的查詢更新格式是這樣的:If-None-Match: W/"50b1c1d4f775c61:df3",。如果ETag沒改變,則返回狀態(tài)304然后不返回,,這也和Last-Modified一樣,。 開發(fā)者會把Last-Modified 和ETags請求的HTTP報頭一起使用,這樣可利用客戶端(例如瀏覽器)的緩存,。因為服務(wù)器首先產(chǎn)生 Last-Modified/Etag標記,,服務(wù)器可在稍后使用它來判斷頁面是否已經(jīng)被修改。本質(zhì)上,,客戶端通過將該記號傳回服務(wù)器要求服務(wù)器驗證其(客 戶端)緩存,。過程如下: 客戶端請求一個頁面(A)。 服務(wù)器返回頁面A,,并在給A加上一個Last-Modified/ETag,。 客戶端展現(xiàn)該頁面,,并將頁面連同Last-Modified/ETag一起緩存,。 客戶再次請求頁面A,并將上次請求時服務(wù)器返回的Last-Modified/ETag一起傳遞給服務(wù)器,。 服務(wù)器檢查該Last-Modified或ETag,,并判斷出該頁面自上次客戶端請求之后還未被修改,直接返回響應(yīng)304和一個空的響應(yīng)體,。 |
|
來自: 昵稱8508458 > 《CSS優(yōu)化》