任務(wù)描述
本關(guān)任務(wù):分析 HTTP 請(qǐng)求與響應(yīng)報(bào)文中與緩存有關(guān)的字段。
相關(guān)知識(shí)
為了完成本關(guān)任務(wù),你需要掌握:
- WEB 緩存訪問(wèn)過(guò)程及機(jī)制;
- HTTP 報(bào)文中與緩存有關(guān)的字段;
- 如何捕獲緩存請(qǐng)求與報(bào)文。
瀏覽器緩存訪問(wèn)過(guò)程及機(jī)制
WEB 緩存一般分為瀏覽器緩存、代理服務(wù)器緩存以及網(wǎng)關(guān)緩存。WEB 緩存就在服務(wù)器-客戶端之間搞監(jiān)控,監(jiān)控請(qǐng)求,并且把請(qǐng)求輸出的內(nèi)容(例如 HTML 頁(yè)面、圖片和文件)另存一份(統(tǒng)稱為副本);然后,如果下一個(gè)請(qǐng)求是相同的 URL ,則直接請(qǐng)求保存的副本,而不是再次訪問(wèn)資源服務(wù)器。 使用緩存的 2 個(gè)主要優(yōu)勢(shì):
- 降低延遲:緩存離客戶端更近,因此,從緩存請(qǐng)求內(nèi)容比從源服務(wù)器所用時(shí)間更少,呈現(xiàn)速度更快,網(wǎng)站就顯得更靈敏;
- 降低網(wǎng)絡(luò)傳輸:副本被重復(fù)使用,大大降低了用戶的帶寬使用,其實(shí)也是一種變相的省錢(qián)(如果流量要付費(fèi)的話),同時(shí)保證了帶寬請(qǐng)求在一個(gè)低水平上,更容易維護(hù)了。
HTTP 協(xié)議緩存是 WEB 緩存的一種,它是通過(guò) HTTP 頭信息來(lái)控制緩存的,HTTP 頭信息可以讓你對(duì)瀏覽器和代理服務(wù)器如何處理你的副本進(jìn)行更多的控制。他們?cè)?HTML 代碼中是看不見(jiàn)的,一般由 Web 服務(wù)器自動(dòng)生成。但是,根據(jù)你使用的服務(wù)器,你可以在某種程度上進(jìn)行控制。
瀏覽器第一次請(qǐng)求流程如下圖所示:
瀏覽器在第一次請(qǐng)求的時(shí)候不存在緩存,直接從瀏覽器請(qǐng)求,等請(qǐng)求返回結(jié)果之后再根據(jù) HTTP 頭信息將數(shù)據(jù)緩存在內(nèi)存或者硬盤(pán)中。 瀏覽器再次請(qǐng)求同一 URL 時(shí)的流程如下圖所示:
瀏覽器需要根據(jù) HTTP 頭信息來(lái)判斷是否直接從緩存讀取數(shù)據(jù),還是交由服務(wù)器來(lái)判斷是否從緩存讀取數(shù)據(jù)。 幾種狀態(tài)碼的區(qū)別如下圖所示:
HTTP報(bào)文中與緩存有關(guān)的字段
HTTP 狀態(tài)碼(status code)
- 200 請(qǐng)求成功,瀏覽器會(huì)把響應(yīng)回來(lái)的信息顯示在瀏覽器端;
- 304 第一次訪問(wèn)一個(gè)資源后,瀏覽器會(huì)將該資源緩存到本地;第二次再訪問(wèn)該資源時(shí),如果該資源沒(méi)有發(fā)生改變或失效,那么服務(wù)器響應(yīng)給瀏覽器 304 狀態(tài)碼,告訴瀏覽器使用本地緩存的資源。
HTTP 響應(yīng)時(shí),如何判斷是該返回 200 還是 304 呢?與之相關(guān)的字段是: Last-Modified: 表示這個(gè)響應(yīng)資源的最后修改時(shí)間。web 服務(wù)器在響應(yīng)請(qǐng)求時(shí),告訴瀏覽器資源的最后修改時(shí)間。 If-Modified-Since: 當(dāng)資源過(guò)期時(shí)(使用 Cache-Control 標(biāo)識(shí)的 max-age),發(fā)現(xiàn)資源具有 Last-Modified 聲明,則再次向 WEB 服務(wù)器請(qǐng)求時(shí),帶上 If-Modified-Since,表示請(qǐng)求時(shí)間。WEB 服務(wù)器收到請(qǐng)求后發(fā)現(xiàn)有 If-Modified-Since 則與被請(qǐng)求資源的最后修改時(shí)間進(jìn)行比對(duì)。若最后修改時(shí)間較新,說(shuō)明資源有被改動(dòng)過(guò),則響應(yīng)資源內(nèi)容(寫(xiě)在響應(yīng)消息包體內(nèi)),HTTP 200 ;若最后修改時(shí)間較舊,說(shuō)明資源無(wú)新修改,則響應(yīng) HTTP 304 (無(wú)需包體,節(jié)省流量),告知瀏覽器繼續(xù)使用緩存。
HTTP 協(xié)議緩存捕獲操作方法與步驟
1.啟動(dòng)瀏覽器,確保瀏覽器的緩存被清除。在 Firefox 下執(zhí)行此操作,請(qǐng)選擇“工具” - > “清除最近歷史記錄”,然后檢查緩存框; 2.啟動(dòng) Wireshark 數(shù)據(jù)包嗅探,在瀏覽器中輸入某一 URL ,瀏覽器應(yīng)顯示一個(gè) HTML 文件; 3.再次快速地將相同的 URL 輸入到瀏覽器中(或者只需在瀏覽器中點(diǎn)擊刷新按鈕); 4.停止 Wireshark 數(shù)據(jù)包捕獲,并在 display-filter-specification 窗口中輸入“http”,以便只捕獲 HTTP 消息,并在數(shù)據(jù)包列表窗口中顯示。
如果無(wú)法連接網(wǎng)絡(luò)并運(yùn)行 Wireshark,則可以使用前一關(guān)中的加載文件的方式來(lái)進(jìn)行分析。
操作要求
雙擊打開(kāi)桌面上的工作區(qū)文件夾”workspace”,再打開(kāi)實(shí)訓(xùn)文件夾”myshixun”,將查詢的信息保存到文件message-2.txt
。具體要求如下:
(1)打開(kāi) Wireshark,加載實(shí)訓(xùn)文件夾中的http-ethereal-trace-2
文件,并篩選出其中的“HTTP”報(bào)文;
(2)選擇列表窗口第一條 HTTP 請(qǐng)求報(bào)文,獲取分組信息;
(3)展開(kāi) HTTP 報(bào)文頭部信息,查找有無(wú) IF-MODIFIED-SINCE
字段,并填寫(xiě)到文件中(填寫(xiě)“有”或“無(wú)”);
(4)查看該報(bào)文對(duì)應(yīng)的響應(yīng)報(bào)文的響應(yīng)體部分,是否包含請(qǐng)求文件的內(nèi)容,并寫(xiě)到文件中(填寫(xiě)“有”或“無(wú)”);
(5)選擇列表窗口第二條 HTTP 請(qǐng)求報(bào)文并展開(kāi),在頭部查找有無(wú) IF-MODIFIED-SINCE
字段,并填寫(xiě)到文件中(填寫(xiě)“有”或“無(wú)”);
(6)選擇列表窗口第二條 HTTP 請(qǐng)求報(bào)文對(duì)應(yīng)的響應(yīng)報(bào)文,展開(kāi) HTTP 頭部信息查找服務(wù)器返回的狀態(tài)編碼,填寫(xiě)到文件中;
(7)在該響應(yīng)報(bào)文中,展開(kāi) HTTP 頭部信息查找服務(wù)器返回的狀態(tài)描述,填寫(xiě)到文件中(注意首字母大寫(xiě));
(8)該響應(yīng)報(bào)文中,有無(wú)包含了請(qǐng)求文件內(nèi)容;
message-2.txt
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-764143.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-764143.html
到了這里,關(guān)于第2關(guān):HTTP 協(xié)議緩存的響應(yīng)分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!