1. 程式人生 > >從輸入一個網址到看到頁面,瀏覽器做了哪些工作

從輸入一個網址到看到頁面,瀏覽器做了哪些工作

當瀏覽器第一次請求某個URL時,順利訪問的話,伺服器返回狀態200的狀態,
同時會返回給瀏覽器一些Headers集合,例如set-cookie,Last-Mondified,Etag等等
下面重點說明Last-Mondified與Etag,即瀏覽器快取.

HTTP/1.x 200 OK
Server: Microsoft-IIS/7.5
Last-Modified: Thu, 31 Dec 2009 09:29:09 GMT
Etag: "e46de5b4fb89ca1:0"
Expires: Thu, 07 Jan 2010 00:00:00 GMT  


Last-Mondified: 最後一次修改時間
Etag: 資源的狀態唯一標識(每個資源的etag都不同,例如img,js,css。。。。)

Expires: 指定資源在瀏覽器快取中的過期時間 (需要在服務端設定)

瀏覽器接收到伺服器這些資訊後,就會將資源快取在本地目錄中,同時儲存檔案的上述資訊.
如果有set-cookie的話,且瀏覽器未禁用cookie,則會儲存cookie資訊,當cookie過期時間大於當前時間時,瀏覽器會將cookie儲存在本地硬碟.
下次傳送時會同header頭一起傳送給伺服器,當然條件是相同域,path約束相符等等情況下.

第二次請求時,根據 HTTP 協議的規定,瀏覽器會向伺服器傳送 If-Modified-Since 與 If-None-Match 報頭,
這兩個報頭實際上是第一次請求時伺服器返回的Last-Modified,Etag.傳送這兩個報頭目地是詢問伺服器,該資源在時間內有沒有被修改過.

如果該資源未被修改,則伺服器會直接返回HTTP 304 (Not Changed.)狀態碼,內容為空,此時不會下載資源,瀏覽器則自動從快取目錄中讀取資源.

使用Last-Modified/Etag 可以減少傳輸成本,但不會減少http請求