四 請求頭和響應頭
還記得我們前面提到的上網流程吧?
1 DNS解析,獲取A記錄,找到網站對應的IP地址
2 三次握手
三次握手之前服務器處在listen狀態 建立完三次握手之后服務器處于established狀態可以傳輸數據
Established階段的工作
1) 客戶端發起請求,告訴服務器要什么
http://www.sina.com.cn/meizi.jpg
2) 服務器接收請求:讀取請求信息內容
3) 服務器處理請求:將請求交給文件系統,讓文件系統去找文件
4) 服務器響應請求:將數據交給客戶端
a) 要不要壓縮?(取決于雙方是否支持壓縮)
b) 是否開了長連接(長連接:在服務器和客戶端建立連接之后,不會立即斷開,會等待一定時間,在此時間內如果再有數據包發送就不需要進行三次握手,可直接發送,對應的就是短連接)
3 四次斷開
在這個流程中接收請求和處理請求是在服務器內部完成的,所以呢,我們來看一下發起請求和響應請求
環境準備
為Apache生成一個web頁面
echo "hello" > /var/www/html/index.html
systemctl restart httpd
訪問測試
安裝wireshark(圖形界面查看數據包內容的工具)
[root@manage01 ~]# dnf install wireshark* -y
抓包
[root@manage01 ~]# tcpdump -nn -vvv -s 1500 -w /tmp/httpd host 172.16.121.141 and port 80 -i ens37
切換到另一臺主機訪問
curl 172.16.121.141
使用apache主機查看抓到的數據包
[root@manage01 ~]# wireshark /tmp/httpd
wireshark的幾面分為三部分
第一部分是數據包列表
No.: 序號
Time: 時間
Source: 源地址
Destination: 目標地址
Protocol:協議
Length:長度
info:簡介
第二部分為數據包的詳細信息
Frame&Ethernet 數據鏈路層數據,主要是mac地址和幀
Internet protocol 網絡層信息 邏輯鏈路尋址,主要是IP地址
Transmssion Control 傳輸控制,可以查看應用層信息
第三部分為16進制數據
在wireshark中如果是確認包,在選中的時候前面會有√的標記,如果是請求包會有→的標記,如果是響應包會有←的標記
我們先看一下第四個包,請求頭
Hypertext Transfer Protocol
#HTTP協議
GET / HTTP/1.1rn #請求信息
[Expert Info (Chat/Sequence): GET / HTTP/1.1rn]#專家信息
[GET / HTTP/1.1rn]
#獲取根下的數據,http協議的版本是1.1 rn=換行符
[Severity level: Chat]
#嚴重級別 chat note warn error
[Group: Sequence]
#數據包屬于哪個組(類)
Checksum:校驗和類
Sequence:序列號類
Response:響應類
Request:請求類
Undecoded:不能識別類
Reassemble:重組問題類
Malformed:畸形數據包類
Debug:不應該出現匹配此類型的數據包
Request Method: GET
#請求的方法是get,獲取數據,獲取的數據通過Request URI指定
get 獲取指定的資源
post 向指定資源提交數據進行處理,有可能導致新的資源的建立或原有資源的修改
put 向指定資源位置上上傳其最新內容(從客戶端向服務器傳送的數據取代指定資源的內容)
delete 刪除指定的資源
opions 返回服務器針對特定資源所支持的HTML請求方法 或web服務器發送測試服務器功能(允許客戶端查看服務器性能)
Trace 回顯服務器收到的請求,用于測試和診斷
Connect 將服務器作為代理,讓服務器代替用戶去訪問其他網頁,之后將數據返回給用戶。
Head 與get請求類似,返回的響應中沒有具體內容,用于獲取報頭
Request URI: /
#請求的資源信息
Request Version: HTTP/1.1
#請求的版本
Host: 172.16.121.141rn
#請求的主機信息
User-Agent: curl/7.64.1rn
#客戶端瀏覽器和版本
Accept: */*rn
rn
#客戶端支持的內容類型,服務器會根據此內容返回信息
內容類型主要指的是文本類,視頻,音頻,圖片等
Accept:text/html,Application/xhtml+xm… #接受的數據類型
Accept-Language:en-US,en;q=0.5 #語言環境
Accept-Encoding:gzip, deflate #是否支持壓縮,及類型
Connection:keep-alive #是否支持長連接
Upgrade-Insecure-Requests:1 #客戶端優先選擇加密及帶有身份驗證的響應
If-Modified-Since: Wed, 25 Mar 2020 12:18:04 GMT
#把瀏覽器端緩存頁面的最后修改時間一起發到服務器去,服務器會把這個時間與服務器上實際文件的最后修改時間進行比較。如果時間一致,那么返回HTTP狀態碼304(不返回文件內容),客戶端接到之后,就直接把本地緩存文件顯示到瀏覽器中。如果時間不一致,就返回HTTP狀態碼200和新的文件內容,客戶端接到之后,會丟棄舊文件,把新文件緩存起來,并顯示到瀏覽器中。(如果客戶端是第一次訪問,不會出現此字段,因為客戶端沒有相關緩存數據)
If-None-Match: "5-5a1acdc3a6d9e" #驗證標簽,用來幫助控制緩存驗證
[Full request URI: http://172.16.121.141/]
#完整的請求信息
[HTTP request 1/1]
#http請求進度
[Response in frame: 6]
#響應幀是第6幀
[Next request in frame:8]
#下一個請求幀
請求頭我們就看完了,接下來就是一個應答包
這個應答包的作用就是服務器告訴客戶端:“你的請求我收到了,等著吧,我給你找數據”,如果客戶端收不到這個應答吧,就會再次發起請求
然后第六個就是響應包,來看下響應包當中的響應頭
Hypertext Transfer Protocol
HTTP/1.1 200 OKrn
#響應代碼
[Expert Info (Chat/Sequence): HTTP/1.1 200 OKrn]
[HTTP/1.1 200 OKrn]
[Severity level: Chat]
[Group: Sequence]
Response Version: HTTP/1.1
#響應版本
Status Code: 200
#響應代碼
[Status Code Description: OK]
#狀態代碼介紹
Response Phrase: OK
#響應短語
Date: Wed, 25 Mar 2020 02:37:05 GMTrn
#響應時間
Server: Apache/2.4.37 (centos)rn
#服務器版本
Last-Modified: Wed, 25 Mar 2020 02:33:30 GMTrn
#服務器認定的資源做出修改的日期及時間。 它通常被用作判斷接收到的或者存儲的資源是否一致。由于精確度比ETag要低,所以這是一個備用機制。
ETag: "6-5a1a4b1a67408"rn
#驗證標簽,用來幫助控制緩存驗證,當瀏覽器請求服務器的某項資源(A)時, 服務器根據A算出一個哈希值,并通過 ETag 返回給瀏覽器,瀏覽器把對應的哈希值和A同時緩存在本地,當下次再次向服務器請求A時,會把這個哈希值發送給服務器,服務器再次計算A的哈希值并和剛剛接收到的哈希值做比較,如果發現A發生了變化就把A返回給瀏覽器(200),如果發現A沒有變化就給瀏覽器返回一個304未修改。這樣通過控制瀏覽器端的緩存,可以節省服務器的帶寬,因為服務器不需要每次都把全量數據返回給客戶端
Accept-Ranges: bytesrn
#接受范圍,如果出現此字段表示,這是一個續傳的下載(斷點續傳),bytes表示服務器可接受范圍請求的單位是bytes,none表示不支持
Content-Length: 6rn
#返回的數據長度,單位為字節
[Content length: 6]
Keep-Alive: timeout=5, max=100
#長連接的時長及能夠處理的請求數量
Connection:keep-alive
#支持長連接
Content-Type: text/html; charset=UTF-8rn
rn
#頁面類型,文本、圖片、視頻、音頻,及字符編碼
[HTTP response 1/1]
#響應進度
[Time since request: 0.019117000 seconds]
#響應耗時
[Request in frame: 4]
#請求幀是第四幀
[Next request in frame:8]
#下一個請求幀
[Next response in frame:9]
#下一個響應幀
File Data: 6 bytes
#數據大小
Line-based text data: text/html (1 lines)
#數據類型及相關信息
hellon
#數據內容
以上就是http的請求頭內容和響應頭內容
1xx(臨時響應)
100: 請求者應當繼續提出請求。
101(切換協議) 請求者已要求服務器切換協議,服務器已確認并準備進行切換。
2xx(成功)
200:正確的請求返回正確的結果,如果不想細分正確的請求結果都可以直接返回200。
201:表示資源被正確的創建。比如說,我們 POST 用戶名、密碼正確創建了一個用戶就可以返回 201。
202:請求是正確的,但是結果正在處理中,這時候客戶端可以通過輪詢等機制繼續請求。
203:請求的代理服務器修改了源服務器返回的 200 中的內容,我們通過代理服務器向服務器 A 請求用戶信息,服務器 A 正常響應,但代理服務器命中了緩存并返回了自己的緩存內容,這時候它返回 203 告訴我們這部分信息不一定是最新的,我們可以自行判斷并處理。
3xx(已重定向)
300:請求成功,但結果有多種選擇。
301:請求成功,但是資源被永久轉移。比如說,我們下載的東西不在這個地址需要去到新的地址。
303:使用 GET 來訪問新的地址來獲取資源。
304:請求的資源并沒有被修改過。
308:使用原有的地址請求方式來通過新地址獲取資源。
4xx(請求錯誤)
400:請求出現錯誤,比如請求頭不對等。
401:沒有提供認證信息。
402:為以后需要所保留的狀態碼。
403:請求的資源不允許訪問。就是說沒有權限。
404:請求的內容不存在。
406:請求的資源并不符合要求。
408:客戶端請求超時。
413:請求體過大。
415:類型不正確。
416:請求的區間無效。
5xx(服務器錯誤)
500:服務器錯誤。
501:請求還沒有被實現。
502:網關錯誤。
503:服務暫時不可用。服務器正好在更新代碼重啟
505:請求的 HTTP 版本不支持。
總結
如何使用抓包工具
如何使用wireshark查看抓取到的數據包
wireshark的界面包含哪些內容
請求頭當中所包含的信息的含義
響應頭分析
常用的響應代碼含義
重點:相關工具的使用,請求頭當中包含的內容,響應頭當中包含的內容
難點:記住并理解請求頭當中所包含的信息和作用,理解響應頭中字段的含義和作用,記住常用的響應代碼功能