HTTP 協議 -- 瀏覽器緩存機制

瀏覽器緩存機制
瀏覽器緩存機制主要是 HTTP 協議定義的緩存機制。
HTTP 協議中有關緩存的緩存信息頭的關鍵字有 Cache-Control,Pragma,Expires,Last-Modified/ETag 等。
瀏覽器請求流程
瀏覽器第一請求流程:
?
瀏覽器再次請求流程:
ETag/If-None-Match
當資源過期時(Cache-Control 中 max-age 設置),發現資源有 ETag 聲明,則再次向服務器請求帶上?If-None-Match (ETag 值)。服務器收到請求后發現頭?If-None-Match,則與被請求資源相應校驗串進行對比,返回 200 或 304 。
Last-Modified/If-Modified-Since
當資源過期時(Cache-Control 中 max-age 設置),發現資源有 Last-Modified 聲明,則再次向服務器請求時帶上?If-Modified-Since,表示請求時間。服務器收到請求后發現頭有?If-Modified-Since ,則與被請求的資源進行最后修改時間進行對比。若最后修改時間較新,說明資源又被改動過,則響應整片資源內容(200);若最后修改時間較舊,說明資源沒有修改,會響應 304,告知瀏覽器繼續使用保存的 cache 。
Last-Modified 和 ETag 區別?
ETag 出現是為了解決 Last-Modified 幾個難解決的問題:
Last-Modified 標注的資源最后修改時間只能精確到秒級;
若某些文件被定期生成,有時它們內容沒有變化,但是 Last-Modified 卻改變了,這樣導致文件無法使用緩存;
有可能存在服務器沒有準確獲取文件的最后時間,或者與代理服務器時間不一致。
ETag 由服務器自動生成,能根據準確的控制緩存。當 Last-Modified 與 ETag 一起使用時,服務器會優先驗證 ETag。
瀏覽器檢查緩存機制流程
?
在用戶端,瀏覽器有一系列機制通過緩存來提升頁面加載速度。例如 IE/Chrome 都會緩存 GET 類型的 AJAX 請求,IE 甚至還會緩存 POST 類型的請求,可以通過增加時間戳參數的方式來強制清除緩存。對于所有的靜態資源文件,最佳實踐是為它們增加一個永不過期的長緩存。
Cache-Control 是瀏覽器緩存機制中最重要的一個配置,下面是瀏覽器加載靜態資源文件時緩存檢查機制流程:
從上可以看出,靜態資源優化的最佳狀態是:從本地緩存資源讀取 > 304 狀態 > 200 狀態。
參考文章:
瀏覽器 HTTP 協議緩存機制詳解:http://www.open-open.com/lib/view/open1421744212609.html
瀏覽器緩存機制詳解:http://mangguo.org/browser-cache-mechanism-detailed/
http://www.cnblogs.com/kaiye/p/5030893.html

轉載于:https://www.cnblogs.com/god--love-you/p/6691312.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393231.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393231.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393231.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php 獲取實例的類名,PHP類名獲取方式及單例模式實現

類名是什么意思?顧名思義就是各類起了一個名字,java中有兩種數據類型,基本數據類型和引用數據類型,這里類就是引用數據類型,我們在定義一個類的時候必須給類起一個名字,一邊后面的使用比如:int …

CAP理論的理解

CAP理論作為分布式系統的基礎理論,它描述的是一個分布式系統在以下三個特性中: 一致性(Consistency)可用性(Availability)分區容錯性(Partition tolerance)最多滿足其中的兩個特性。也就是下圖所…

開啟真我新格調 期待絢麗的未知

我們每天都在朝幸福努力著,而眼光看的太遠,往往會忘記自己究竟要的是什么。人想要幸福,就得活出真我,當人不能放心大膽地活出自己時,內心會有不安和痛苦。為何要隱藏真正的自己?外界的評判真的那么重要?真我新格調&a…

vuex構建vue項目_如何使用Vue.js,Vuex,Vuetify和Firebase構建單頁應用程序

vuex構建vue項目如何使用Vuetify和Vue路由器安裝Vue并構建SPA (How to install Vue and build an SPA using Vuetify and Vue Router) Do you want to learn how to use Vue.js? Want to create a realistic website using Vue.js? In this tutorial, I will teach you how t…

vim 自動補全

1. vim編輯器自帶關鍵字補全 觸發&#xff1a; ctrl n or ctrl p 補全命令&#xff1a; <C-n> 普通關鍵字 【能夠根據buffer以及標簽文件列表等進行關鍵字補全】 <C-x><C-f> 文件名補全【像在命令行的提示信息一樣&#xff0c;提示當前工…

Linux-RHEL5-初學者配置vsftpd注意事項

我安裝的是RHEL5.4&#xff0c;初學&#xff0c;不在意版本。為了學習方便&#xff0c;安裝操作系統時能選的選項都選全了。事實證明這個決策是正確滴&#xff0c;要不還得花時間學習怎么安裝vsftp。 網上關于如何配置vsftpd的資料挺多的。 我花了小半天的時間&#xff0c;除了…

leetcode459. 重復的子字符串

給定一個非空的字符串&#xff0c;判斷它是否可以由它的一個子串重復多次構成。給定的字符串只含有小寫英文字母&#xff0c;并且長度不超過10000。 示例 1: 輸入: “abab” 輸出: True 解釋: 可由子字符串 “ab” 重復兩次構成。 代碼 class Solution {public boolean r…

解析xml的4種方法詳解

1. 介紹 1&#xff09;DOM(JAXP Crimson解析器) DOM是用與平臺和語言無關的方式表示XML文檔的官方W3C標準。DOM是以層次結構組織的節點或信息片斷的集合。這個層次結構允許開發人員在樹中尋找特定信息。分析該結構通常需要加載整個文檔和構造層次結構&#xff0c;然后才…

php mvc 高性能框架,swoolefy-基于swoole擴展實現的高性能的微服務和mvc框架

swoolefy這是一個基于swoole擴展實現的輕量級高性能的API和Web的MVC微服務框架&#xff0c;參考了TP,Yii2,Workerman&#xff0c;swoole_framework等框架的的設計思想。同時也結合了多年來的技術的積累的以及生產環境中的實踐經驗實現的功能特性1、輕量級的框架,實現路由與調度…

arcore_如何使用ARCore和Android Studio構建增強現實Android應用

arcoreby Ayusch Jain通過Ayusch Jain 如何使用ARCore和Android Studio構建增強現實Android應用 (How to build an Augmented Reality Android App with ARCore and Android Studio) This article was originally posted here本文最初發布在這里 In the previous post, I expl…

最小值的最優化問題

無約束極小值的最優化條件&#xff1a; 關于多元函數極小值點的必要條件&#xff1a; 滿足的點稱之為f(x)的駐點或穩定點&#xff0c;但是反過來&#xff0c;滿足梯度條件的點不一定是f(x)的局部極小值。因此&#xff0c;定理轉化為求解下面的方程組問題&#xff1a; 對于上面…

leetcode950. 按遞增順序顯示卡牌

牌組中的每張卡牌都對應有一個唯一的整數。你可以按你想要的順序對這套卡片進行排序。 最初&#xff0c;這些卡牌在牌組里是正面朝下的&#xff08;即&#xff0c;未顯示狀態&#xff09;。 現在&#xff0c;重復執行以下步驟&#xff0c;直到顯示所有卡牌為止&#xff1a; …

第2課 - 搭建Lua開發環境

第2課 - 搭建Lua開發環境 1. Lua 的優點 &#xff08;1&#xff09;Lua 使用標準的 ANSI C 進行開發&#xff0c;可以無縫集成到宿主程序&#xff0c;且幾乎支持所有平臺。 &#xff08;2&#xff09;Lua 是開源且免費的軟件&#xff0c;以源碼的方式直接發布。開源軟件的發布方…

關于文件系統權限的管理

關于文件系統權限的管理 眾所周知的是&#xff0c;一個操作系統&#xff0c;是需要為不同的用戶進行服務的&#xff0c;因為不能讓每個人都以管理員進行操作&#xff0c;這樣做的話&#xff0c;毫無安全性可言&#xff0c;所以我們需要驗證和授權。這就體現了權限的重要性&…

深度學習工作開展_深入開展深度工作:新經濟中的兩項核心能力

深度學習工作開展by Bar Franek由Bar Franek 深入開展深度工作&#xff1a;新經濟中的兩項核心能力 (Going Deeper on Deep Work: Two Core Abilities for Thriving in the New Economy) 愛深層工作的更多理由 (A Few More Reasons To Love Deep Work) I had no idea my first…

java獲取文件名方法,利用Java獲取文件名、類名、方法名和行號的方法小結

大家都知道&#xff0c;在C語言中&#xff0c;我們可以通過宏FILE、 __LINE__來獲取文件名和行號&#xff0c;而在Java語言中&#xff0c;則可以通過StackTraceElement類來獲取文件名、類名、方法名、行號&#xff0c;具體代碼如下&#xff1a;public static int getLineNumber…

tp5.1升級指導---控制器調整 _initialize方法更改為initialize

控制器調整 為了規范化&#xff0c;繼承了think\Controller類的話&#xff0c;初始化方法從原來的_initialize方法更改為initialize。轉載于:https://www.cnblogs.com/lsyy/p/11027416.html

leetcode537. 復數乘法

給定兩個表示復數的字符串。 返回表示它們乘積的字符串。注意&#xff0c;根據定義 i2 -1 。 示例 1: 輸入: “11i”, “11i” 輸出: “02i” 解釋: (1 i) * (1 i) 1 i2 2 * i 2i &#xff0c;你需要將它轉換為 02i 的形式。 代碼 class Solution {public String c…

初始多態

package Li;public class Person { String name;public Person() {super(); }public Person(String name) {super();this.name name; }public void eat(){System.out.println(name"正在吃面包"); } }package Li;public class Student extends Person {public Studen…

Bitmap尺度變換

1 Bitmap bitMap BitmapFactory.decodeFile(path);2 int width bitMap.getWidth();3 int height bitMap.getHeight();4 // 設置想要的大小5 int newWidth 500;6 int newHeight 400;7 // 計算縮放比例8 float scaleWidth ((float) newWidth) / width;9 float scaleHeight …