HTTP緩存過程詳解
http緩存作爲面試常考題目,我們必須理解他的詳細過程,接下來請大家務必理解並牢記這篇博客的所有內容,大家也不要閒內容多,因爲http不管是在面試還是在工作中,真的很重要。而且在面試中,我們可以通過詳細描述http緩存,不僅讓面試官對我們有好感,還能拖延時間,讓面試官少問其他比較難的問題。
HTTP文件緩存是基於HTTP協議的瀏覽器端文件緩存機制。
在文件重複請求的情況下,瀏覽器可以根據HTTP響應的協議頭信息判斷是從服務器端請求文件還是從本地讀取文件。
Chrome控制檯Application下的Frames就可以查看瀏覽器的HTTP文件緩存列表內容。
首先我們需要了解HTTP緩存的兩種方式。
- Expires:在HTTP1.1版本之前,瀏覽器緩存主要是通過對HTTP 1.0 的
Expires
頭部控制來實現的,Expires
只能根據絕對時間來刷新緩存內容。 - Cache-Control:HTTP 1.1增加了
Cache-Control
頭域,可以支持max-age
用來表示相對過期時間。
另外請求服務器時也可以根據Etag
和Last-Modified
來判斷是否從瀏覽器端緩存中加載文件,此時緩存的控制和判斷將決定服務器的響應報文中頭部內容的狀態碼200還是304。
瀏覽器發起請求,頭部域字段的判斷過程:
- 瀏覽器會先查詢
Cache-Control
(這裏用Expires
判斷也是可以的,如果兩者都設置了,則只有Cache-Control
的設置生效)來判斷內容是否過期,如果未過期,則直接讀取瀏覽器端緩存文件,不發送HTTP請求,否則進入下一步。 - 在瀏覽器端判斷上次文件返回頭中是否含有
Etag
信息,有則帶上If-None-Match
字段信息發送請求給服務器,服務端判斷Etag
未修改則返回304,如果修改則返回200,否則進入下一步。 - 在瀏覽器端判斷上次文件返回頭中是否含有
Last-Modifed
信息,有則帶上
If-Modified-Since
字段信息發送請求,服務端判斷Last-Modified
失效則返回200, 有效則返回
304。 - 如果
Etag
和Last-Modified
都不存在,則直接向服務器請求內容。
這就是Cache-Control
、Etag
和Last-Modified
控制請求緩存的主要過程。
我們可以結合流程圖來詳細理解下HTTP緩存判斷過程。