1. 程式人生 > 其它 >從輸入一個URL地址到瀏覽器完成整個渲染的過程

從輸入一個URL地址到瀏覽器完成整個渲染的過程

  1. 瀏覽器查詢當前URL是否存在快取(http快取機制)

    快取過程分析

    瀏覽器與伺服器通訊的方式為應答模式,即客戶端發起請求-伺服器響應請求。

    1. 瀏覽器每次向伺服器請求的結果和標識,都會存入瀏覽器快取中

    2. 瀏覽器向伺服器發起請求後,會先從快取中查詢快取結果和快取標識,再進行下一步判斷是否需要再次向伺服器發起請求。

    HTTP請求快取分為兩個部分,強制快取和協商快取。

    強制快取

    強制快取就是瀏覽器向快取中檢視結果,並根據快取結果和快取規則決定是否使用該快取結果。

    1. 強制快取失效,不存在快取結果跟快取標識。直接向伺服器發起請求(等同於第一次請求)。
    2. 強制快取失效,存在快取結果跟快取標識。
      採取協商快取。
    3. 強制快取生效,存在快取結果跟快取標識,未失效。直接使用瀏覽器快取。

    強制快取規則

    控制強制快取的欄位為Expires和Cache-Control,其中Cache-Control的優先順序比Expires高。

    協商快取

    協商快取就是在快取結果和快取標識存在但是失效的情況下,由伺服器根據收到的快取標識決定是否使用快取的過程。

    1. 伺服器發現資源無更新,協商快取生效,返回狀態碼304。
    2. 伺服器發現資源已更新,協商快取失效,返回新的內容,狀態碼200。

    協商快取規則

    控制協商快取的欄位有:Last-Modified/If-Modified-Since和Etag/If-None-Match。

    • Last-Modified是該資源在伺服器中最後一次修改的時間。
    • If-Modified-Since是客戶端在請求伺服器時,攜帶Last-Modified欄位,告訴伺服器上次返回的資源的最後修改時間。伺服器收到該欄位後,與該資源在伺服器最後被修改的時間做對比,如果不一致,則重新返回資源,否則使用快取檔案。
    • Etag是伺服器響應資源時,返回的該資源的唯一標識。
    • If-None-Match是客戶端再次發起請求時,攜帶資源的Etag欄位,伺服器收到請求後,發現有If-None-Match欄位,與該資源在伺服器上的Etag欄位的值作比較,若相等則返回304表示無更新,不相等則返回新資源。

    注:Etag / If-None-Match優先順序高於

    Last-Modified / If-Modified-Since,同時存在則只有Etag / If-None-Match生效。

    瀏覽器快取存放

    瀏覽器快取有兩個來源:from disk cache/form memory cache

    from disk cache代表硬碟中的快取;

    form memory cache代表記憶體中的快取。

    在瀏覽器中,會在js和圖片檔案解析執行後存入記憶體快取中;而css檔案則會存入硬碟中。


繼續更新