瀏覽器快取機制主要就是http協議定義的快取機制,header中的expires,cache-control那些的
也有非http協議定義的快取機制,使用html meta標籤,可以如下:
上面的**什麼作用呢?意思是告知瀏覽器當前頁面不被快取,也就是說每次訪問都需要去伺服器中獲取。這種有很大的侷限性,因為只有少部分瀏覽器支援,而且所有的快取**伺服器都不支援--**不解析html內容本身
1.expires策略,http1.0的東西,現在基本看不到
expires是伺服器響應訊息頭的乙個字段,告訴瀏覽器在這個字段指定的時間之前瀏覽器可以直接從
瀏覽器本地緩訪問資料,不需要再次請求
2.cache-control策略
這個也是用來指明當前資源的有效期,控制瀏覽器是從瀏覽器快取裡面取資料還是重新傳送請求到伺服器取資料。
與expires相比,cache-control的選擇更多,設定更加細緻,且優先順序高於expires
cache-control的一些指令:
public指示響應可被任何快取區快取。
private指示對於單個使用者的整個或部分響應訊息,不能被共享快取處理。這允許伺服器僅僅描述當使用者的部分響應訊息,此響應訊息對於其他使用者的請求無效。
no-cache指示請求或響應訊息不能快取
no-store用於防止重要的資訊被無意的發布。在請求訊息中傳送將使得請求和響應訊息都不使用快取。
max-age指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應。
min-fresh指示客戶機可以接收響應時間小於當前時間加上指定時間的響應。
max-stale指示客戶機可以接收超出超時期間的響應訊息。如果指定max-stale訊息的值,那麼客戶機可以接收超出超時期指定值之內的響應訊息。
3.last-modified/if-modified-since這個需要配合cache-control一起使用
last-modified:就是表示這個資源最後修改的時間,因為快取資料雖然可能沒有過期,但是伺服器中的對應資源已經修改過了
這時候就需要重新請求為佳
if-modified-since:當資源過期時,發現資源具有last-modified,再次向伺服器請求時
帶上if-modified-since表示請求時間,伺服器將這個請求的時間與last-modified進行比較,有可能資源雖然過期了,但是沒有更改過,所以為了節省流量,可以返回304狀態碼,告訴瀏覽器直接使用快取資料,否則重新傳送資料給瀏覽器
4.etag/if-none-match:
這個也要配合cache-control使用
etag:伺服器響應請求時,告訴瀏覽器這個資源在伺服器的唯一標識(由伺服器覺得的)
比如索引節(inode
),大小(size
)和最後修改時間(mtime
)進行hash
後得到的。
if-none-match:如果資源過期了,發現資源有etag宣告,則再次向伺服器請求,並且帶上頭if-none-match(etag的值)
伺服器收到請求發現有if-none-match,則與伺服器的相應hash串進行比對,決定重新返回資料還是讓瀏覽器使用快取資料
etag是伺服器自動生成或者由開發者生成的對應資源在伺服器端的唯一識別符號,能夠更加準確的控制快取。
伺服器會優先驗證etag,一致的話,繼續對比last-modified,最後才決定是否返回304狀態碼
快取 瀏覽器快取
瀏覽器快取 brower caching 是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件 1 瀏覽器第一次請求時,會發出一組 http 頭,用來指導瀏覽器如何進行快取。伺服器規定乙個資源是否要進行快取,主要由響應頭中的expires...
瀏覽器快取
1.為什麼使用瀏覽器快取 以前了解的動態指令碼加速,或者動態內容快取之類,他們的原理都是避免伺服器重複計算,結果仍保留在伺服器端,這樣獲取資料還得從伺服器檢索然後傳送到使用者瀏覽器,如果我們把這些結果放在瀏覽器中,就省去了伺服器的查詢和網路傳輸,瀏覽器快取很好的實現了這個功能 2.瀏覽器快取存放在哪...
瀏覽器快取
瀏覽器快取知識歸納 瀏覽器快取是提公升網頁效能的一大利器,但是,也是一把雙刃劍。利用的好網頁的效能會有大幅度提公升,伺服器的壓力也會減小。利用的不好,也會遇到很多的問題。本文結合瀏覽器快取的知識,結合真實案例進行分析,希望對讀者有所幫助。瀏覽器快取分類 瀏覽器快取分為強快取和協商快取,瀏覽器載入乙個...