快取的作用:
1.減少延遲(頁面開啟的速度)。
2.降低伺服器負載(先取快取,無快取在請求伺服器,有效降低伺服器的負擔)。
3.保證穩定性(有個笑話是手機搶購時為了保證伺服器的穩定性,在前端寫個隨機數限制百分之二十的人傳送資料到後台,這也側面說明了快取對於穩定性的作用)。
下圖是自己畫的,有點醜,請原諒!待會講解!
瀏覽器與伺服器進行通訊包含兩部分:
1.請求頭header(包含各種快取資訊)。
2.請求體bdoy(資料傳送的主要內容)
頁面快取是由header決定的,包含四個引數:
一、expires:
http1.0推出的,指伺服器返回的檔案有效期,但其實這是有缺陷的,如果把本地的時間改為2023年,那expires的時間怎麼都會過期。
二、last-modified:
http1.0推出的,指伺服器檔案的最後修改時間,瀏覽器會帶上if-modified-since向伺服器傳送請求,與伺服器檔案修改時間last-modified做對比,如果時間不同,則獲取資料返回200,否則返回304後呼叫瀏覽器本地硬碟的快取。 這種方式也有問題,如果服務端檔案頻繁修改儲存,那麼last-modified就會頻繁更改,每次都從服務端獲取,這也就有了http1.1的修改。
從網上拿了個angular.js位址試了一下,第一次返回200,第二次重新整理頁面返回304。
三、cache-control:
http1.1推出,指檔案快取的有效期。
1.max-age:單位是s,設定檔案最大快取時間,用得最多。
2.public:快取可以被多使用者共享,例如360瀏覽器可以登入不同賬號,電腦系統可以切換不同賬號。
3.private:僅單使用者私有,不被多使用者共享。
4.no-cache:不會被快取。
5.no-store:不允許被儲存。
四、etag
http1.1推出,該版本號是由服務端隨機生成的,瀏覽器會帶上if-none-match向伺服器傳送請求,與伺服器檔案修改版本etag做對比,如果版本號不同,則獲取資料返回200,否則返回304後呼叫瀏覽器本地硬碟的快取,這種方式比last-modified靠譜。
思考?
cache-control+last-modified+etag 的優先順序會如何?
還記得剛開始的圖嗎?
因為http1.1>http1.0,
所以cache-control>expires,etag>last-modified。
依照就近原則,先找本地快取,沒有再向伺服器發請求,
所以expires>last-modified,cache-control>etag,
如果瀏覽器只支援http1.0,那麼瀏覽器只會攜帶last-modified傳送給後台,
如果伺服器只支援http1.0,那麼伺服器會以last-modified為標準。
如果瀏覽器支援http1.1,那麼瀏覽器會攜帶cache-control+last-modified+etag傳送給後台,
如果伺服器支援http1.1,那麼伺服器會以cache-control+etag為標準。
至此結束,請多多指正,晚安,早睡身體好!!!
HTTP請求頭詳解
原文 http由兩部分組成 請求和響應。當你在web瀏覽器中輸入乙個url時,瀏覽器將根據你的要求建立並傳送請求,該請求包含所輸入的url以及一些與瀏覽器本身相關的資訊。當伺服器收到這個請求時將返回乙個響應,該響應包括與該請求相關的資訊以及位於指定url 如果有的話 的資料。直到瀏覽器解析該響應並顯...
http請求頭詳解
當我們開啟乙個網頁時,瀏覽器要向 伺服器傳送乙個http請求頭,然後 伺服器根據http請求頭的內容生成當次請求的內容傳送給瀏覽器。你明白http請求頭的具體含意嗎?下面一條條的為你詳細解讀,先看某一次http請求頭的具體內容 下面根據以上http請求內容的先後順序一條條的解讀 1 accept l...
http請求頭詳解
當我們開啟乙個網頁時,瀏覽器要向 伺服器傳送乙個http請求頭,然後 伺服器根據http請求頭的內容生成當次請求的內容傳送給瀏覽器。你明白http請求頭的具體含意嗎?下面一條條的為你詳細解讀,先看某一次http請求頭的具體內容 下面根據以上http請求內容的先後順序一條條的解讀 1 accept l...