解析HTTP響應(yīng)報文
1. HTTP 響應(yīng)報文組成
-
HTTP響應(yīng)是由四部分組成:狀態(tài)行、消息報頭、空行、響應(yīng)正文
HTTP響應(yīng)格式.png -
HTTP響應(yīng)實例
HTTP/1.1 200 OK Server: Tengine Connection: keep-alive Date: Wed, 30 Nov 2016 07:58:21 GMT Cache-Control: no-cache Content-Type: text/html;charset=UTF-8 Keep-Alive: timeout=20 Vary: Accept-Encoding Pragma: no-cache X-NWS-LOG-UUID: bd27210a-24e5-4740-8f6c-25dbafa9c395 Content-Length: 180945 ? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ....
2. 狀態(tài)行解析
-
狀態(tài)行
說明:狀態(tài)行是由 3 部分組成 ,版本協(xié)議、狀態(tài)碼、狀態(tài)碼描述,之間有空格分割
HTTP/1.1 200 OK-
狀態(tài)碼解釋
狀態(tài)碼 解釋用途 100-199 表示 服務(wù)器成功接受部分請求,要求客戶端繼續(xù)提交余下請求才能完成整個處理過程 200-299 表示 服務(wù)器成功接受請求并處理完成。(常用 200 ok) 301 表示 永久重定向,搜索引擎將刪除源地址,保存重定向地址 302 表示 暫時重定向,重定向地址由響應(yīng)頭中的Location屬性指定 (JSP中Forward和Redirect之間的區(qū)別) 由于搜索引擎的判定問題,較為復(fù)雜的URL容易被其它網(wǎng)站使用更為精簡的URL及302重定向劫持 304 表示 緩存文件未過期,可以繼續(xù)使用,無需再次請求服務(wù)器獲取數(shù)據(jù) 400 表示 客戶端請求有語法錯誤,不能被服務(wù)器識別 403 表示 服務(wù)器成功接受客戶端請求,但拒絕提供服務(wù)(認(rèn)證失?。?/td> 404 表示 請求數(shù)據(jù)服務(wù)器無法提供(服務(wù)器找不到) 500-599 表示 服務(wù)器端出現(xiàn)錯誤(客戶端不知道,也不敢問)
-
3. 消息包頭解析
-
消息報頭
-
Server
說明:
Server: Tengine- 服務(wù)器名稱和對應(yīng)的版本。
-
Cnnection
說明:
Connection: keep-alive- 作為回應(yīng)客戶端HTTP請求的 Connection:keep-alive ,通知客戶端服務(wù)器的 tcp 連接也是一個長連接,客戶端可以繼續(xù)使用這個tcp連接發(fā)送HTTP請求。
-
Date
說明:
Date: Wed, 30 Nov 2016 07:58:21 GMT- 服務(wù)器發(fā)送資源時的服務(wù)器時間(GMT是格林尼治所在地的標(biāo)準(zhǔn)時間)。HTTP請求中發(fā)送的時間都是GMT,主要是解決在互聯(lián)網(wǎng)上,不同時區(qū)在相互請求資源的時候,時間混亂問題。
-
Cache-Control(重要技術(shù))
說明:緩存的方式;強制緩存、對比緩存。數(shù)據(jù)緩存示意圖 緩存示意圖
Cache-Control: no-cache參考地址 (建議讀一下,想了解瀏覽器緩存的)
-
瀏覽器緩存解析
-
Cache-Control參數(shù)
參數(shù) 作用 private 默認(rèn)值private,僅客戶端可以緩存 public 客戶端、代理服務(wù)器都可以緩存 no-cache 使用對比緩存驗證緩存數(shù)據(jù)是否可用 max-age max-age=XXX,緩存的數(shù)據(jù)將保存XXX秒 no-stroe 所有數(shù)據(jù)都不緩存 -
對比緩存:需要用來驗證緩存數(shù)據(jù)是否可用的標(biāo)識(基于數(shù)據(jù)已緩存)
-
請求數(shù)據(jù)時,發(fā)送屬性為 If-Modified-Since 獲取數(shù)據(jù)的時間
If-Modified-Since: Tue, 27 Jun 2017 11:09:34 GMTLast-Modified: Tue, 27 Jun 2017 11:09:35 GMT -
服務(wù)器響應(yīng)響應(yīng)請求時,發(fā)送屬性為 Last-Modified 最后修改的時間
Last-Modified: Tue, 27 Jun 2017 11:09:35 GMT If-modifief-Snice 和 Last-Modified 的值大小
-
Etag 和 If-None-Match(優(yōu)先級高于Last-Modified 和 If-Modified-Since)
Etag:服務(wù)器響應(yīng)請求時,告訴客戶端當(dāng)前資源再服務(wù)器的唯一標(biāo)識
Etag: "ABfYctUWoo6IcnFWDuXnoFDYRhTh"If-None-Match:再次請求服務(wù)器時,服務(wù)器收到帶有 If-None-Match 屬性的請求后,與被請求資源的唯一標(biāo)識進行比對,不同,說明資源又被改動過,則響應(yīng)整片資源內(nèi)容,返回狀態(tài)碼 200;相同,說明資源無修改,則響應(yīng) HTTP 304,告知瀏覽器繼續(xù)使用所保存的cache。
-
-
-
-
Content-Type
說明:
Content-Type: text/html;charset=UTF-8- 通知客戶端,響應(yīng)資源文件的類型、字符編碼,客戶端通過規(guī)定解碼方式對資源進行解碼,然后對資源進行html解析。通常有些網(wǎng)站是亂碼,往往就是服務(wù)器端沒有返回正確的編碼。
-
