面試的時候被人問到了這個,實在是答不出來,自己只知道有個cache-control,感覺不行……回家查了查
自己做了一下總結,感覺自己寫一下可能會印象深刻點吧
所謂的http快取,就是瀏覽器自己給你的乙個功能,乙個快取資料庫,夾在服務端和客戶端中間,你只需要設定一些引數即可實現 快取/不快取/時效內快取/時效外快取等(預設存在快取)
時效內快取:強制快取
重點:cache-control:max-age=***
非時效快取:對比快取
重點:etag last-modified/if-modified-since
第一次請求:
非第一次請求:
以上面這兩張圖為基礎,可以簡單的講講http快取,應付面試絕對夠了:
首先你得了解輸入url到看見頁面,發生了什麼(這個也是面試經常問的!!網上的解答也不太一樣,其實這個能用自己的話說出來就可以)
1、首先,在瀏覽器位址列中輸入url
2、瀏覽器先檢視瀏覽器快取-系統快取-路由器快取,如果快取中有,會直接在螢幕中顯示頁面內容。若沒有,則跳到第三步操作。
3、在傳送http請求前,需要網域名稱解析(dns解析),解析獲取相應的ip位址。
4、瀏覽器向伺服器發起tcp連線,與瀏覽器建立tcp三次握手。
5、握手成功後,瀏覽器向伺服器傳送http請求,請求資料報。
6、伺服器處理收到的請求,將資料返回至瀏覽器
7、瀏覽器收到http響應
8、讀取頁面內容,瀏覽器渲染,解析html原始碼
9、生成dom樹、解析css樣式、js互動
10、客戶端和伺服器互動
11、ajax查詢
第一次請求肯定是沒有快取,伺服器除了返回body主體資料之外,還返回乙個header頭部資訊,其中包括了快取的資訊
這個快取的資訊分為兩種,一般來說兩種都用上也行
cache-control (低版本瀏覽器用的是expires,了解即可)
是最重要的規則。常見的取值有private、public、no-cache、max-age,no-store,預設為private。
private: 客戶端可以快取
public: 客戶端和**伺服器都可快取(前端的同學,可以認為public和private是一樣的)
max-age=***: 快取的內容將在 *** 秒後失效
no-cache: 需要使用對比快取來驗證快取資料
no-store: 所有內容都不會快取,強制快取,對比快取都不會觸發(對於前端開發來說,快取越多越好,so...基本上和它說886)
他用的不是時效時間max-age
第一次請求的時候,返回給客戶端資料和快取的資訊,也就是乙個特定的快取標識
客戶端把這個快取標識放到快取資料庫
再次請求時 客戶端先把快取標識也一起發給服務端,進行對比
客戶端將備份的快取標識傳送給伺服器,伺服器根據快取標識進行判斷,判斷成功後,返回304狀態碼,通知客戶端比較成功,可以使用快取資料。
分為兩種快取標識
etag (唯一標識)優先順序更高
last-modified/if-modified-since 返回給客戶端最後這個資源的修改時間,優先順序沒有etag高
對比快取標識生效不生效時,狀態碼200,服務端返回body和header
在對比快取標識生效時,狀態碼為304,並且報文大小和請求時間大大減少。
原因是,服務端在進行標識比較後,只返回header部分,通過狀態碼通知客戶端使用快取,不再需要將報文主體部分返回給客戶端。
總結
強制快取的優先順序更高,如果沒失效,就直接用快取資料庫裡的東西
如果時間已經失效了,就看用的是哪種標識(etag服務端生成的唯一標識,還是last-modified資源最後修改時間標識)返回304就用快取裡的,返回200就返回body和新的header
一般來說,無論如何都會協商快取,瀏覽器必備的快取不可能沒有~
HTTP瀏覽器快取機制
來自 瀏覽器快取機制 瀏覽器快取機制,其實主要就是http協議定義的快取機制 如 expires cache control等 但是也有非http協議定義的快取機制,如使用html meta 標籤,web開發者可以在html頁面的節點中加入標籤,如下 上述 的作用是告訴瀏覽器當前頁面不被快取,每次訪...
瀏覽器HTTP快取機制
介紹http快取之前先簡單說一下web快取 web快取是一種儲存web資源副本並在下次請求時直接使用該副本的技術。web快取可以分為這幾種 瀏覽器快取 cdn快取 伺服器快取 資料庫資料快取 因為可能會直接使用副本免於重新傳送請求或者僅僅確認資源沒變無需重新傳輸資源實體,web快取可以減少延遲加快網...
瀏覽器快取機制 http快取頭
重用已獲取的資源能夠有效的提公升 與應用的效能。web 快取能夠減少延遲與網路阻塞,進而減少顯示某個資源所用的時間。借助 http 快取,web 站點變得更具有響應性。快取作為加快頁面載入速度的方法,可以說是必不可少的乙個方法,如何能更好地運用快取來服務客戶,首先我們就得了解清楚快取 先上一張從se...