瀏覽器按F5與位址列訪問的區別

2021-08-15 23:11:35 字數 2119 閱讀 9615

以下是本人對這些現象的個人理解,不正確的還請指正。

首先來看一下表面現象:

用來測試的瀏覽器為ie瀏覽器,首先將瀏覽器的快取全部清空。

第一次訪問目標位址,我們的開發者工具中網路面板顯示情況如下:

相應的請求頭和響應頭分別為:

1.request頭部,ie瀏覽器沒有控制快取的資訊

2.response的頭部資訊:

可以看到,響應表頭新增了etag和last-modified資訊。etag和last-modified的意義將在下文講到。

此時我們分別通過按f5重新整理按和在位址列裡重新輸入位址觀察現象。

按f5重新整理按鈕:

我們得到乙個304的狀態碼,意思是伺服器資源並沒有修改,b.html將從快取載入。對這次請求的request和response進行分析。

request請求:

可以看到,這次的請求頭部有乙個if-modified-since和if-none-match資訊。它們的含義大致為:在第一次訪問的過程中,我們看到響應裡有etag和last-modified兩個key的資訊。last-modified根據字面理解就是該資源上次修改的日期。etag可以簡單理解為資源的乙個識別符號,在資源的各個生命週期中,它都具有不同的

值。當資源發生變更時,如果其頭資訊中乙個或者多個發生變化,或者訊息實體發生變化,那

麼etag也隨之發生

變化。第二次請求的if-modified-since和if-none-match作用便是與伺服器上儲存的etag和last-modified進行對比,如若if-modified-since與last-modified相等並且etag和if-none-match相等,則伺服器返回304狀態碼,表示資源並沒有重新整理。若不相等,則重新從伺服器進行資源的獲取。

明白了以上的原理,我們分析上面的請求頭,可以看到該對比是相等的,所以系統的response便是304狀態碼,我們可以看一下這個response。

分析了按f5出現304狀態碼的原因,我們再來看一下在位址列輸入出現的結果

位址列輸入位址按回車:

可以看到,結果為200狀態碼,結果來自快取,意思就是瀏覽器並沒有傳送請求。

我們看到的請求的標頭也是空的,那麼位址列輸入位址按回車意思就是直接從快取進行載入,而不去進行快取內容的更新驗證。但是問題來了,我們都知道快取是有乙個過期時間的,如果快取沒有過期可以看到以上結果,如果快取過期怎麼辦呢,我們繼續分析。

現在我們用charles工具進行分析,該工具可以攔截http的請求響應並進行相應的想改再傳送。

我們首先在charles打好斷點,清楚快取,訪問該html頁面。

此時,我們的該html的響應中,給它新增乙個過期時間,cache-control:max-age=30。意思是該快取可以存活30s,具體的cache-control細節我正在研究,並在將來寫相應的原理講解的文章。

這時,將這個請求,返回給瀏覽器。等待30s,我們再次通過位址列輸入位址按回車鍵,可以看到此次請求並沒有像之前那樣直接從快取載入資料,而是向伺服器傳送了請求,進行了快取的驗證工作。

簡化瀏覽器位址列訪問路徑

普通情況下,你的專案project中的web.xml檔案裡進行了這種配置 index.jsp 那麼在瀏覽器位址列輸入http localhost 8080 你的project名 就是預設訪問的project的webroot資料夾下的index.jsp檔案 我想輸入http localhost 808...

瀏覽器位址列背後的logic

曾經有面試題是這樣的 描述在瀏覽器的位址列中輸入 後發生了什麼?1 服務端返回baidu頁面資源,瀏覽器載入html 2 瀏覽器開始解析 3 發現link,傳送請求載入css檔案 4 瀏覽器渲染頁面 5 發現,傳送請求載入,並重新渲染 6 傳送請求js檔案,阻塞渲染。如果js對dom進行了操作,則會...

瀏覽器位址列的組成部分

舉例 第一部分 http http即資料傳輸協議。協議是一種規範或標準,需要按照這個標準進行資料傳輸,如果不加,瀏覽器不會執行資料傳輸。第二部分 127.0.0.1 8848 主機 ip 網域名稱 埠號 127.0.0.1 ip 網域名稱 8848 埠號 區分同一臺電腦上多個服務 第三部分 web2...