附:完整筆記目錄~
ps:本人小白,筆記均在個人理解基礎上整理,若有錯誤歡迎指正!
5.1 Http資料包
- 引子:上文說過,網路間大都靠資料包進行通訊,而在應用層中被使用最多的資料包則為Http資料包,在第二章曾介紹瞭如何藉助工具對Http資料包進行攔截。本篇則對Http資料包格式、內容等進行總結。
- 概述:已知Http協議為單向請求,即請求只能由客戶端向服務端發起,服務端收到請求後將處理後的結果返回給客戶端,此時Http協議斷開。而在這段Http協議工作的過程中,我們可以注意到共有兩次資料包文的傳遞,稱由客戶端向服務端傳送的資料包文為請求報文(Request),服務端返回給客戶端的資料包文為響應報文(Response)。
本篇則依次對請求報文&響應報文格式、各部分內容進行介紹。(下文分別以請求包&響應包稱呼請求報文&響應報文,這倆一個東西) - 請求包格式:請求行,請求頭(,空行,請求體)→ 僅在POST/PUT方法存在
其中請求行又由:請求方法、URL和Http協議版本組成,以下為一個典型的Http請求包
- 請求行→請求方法
- 概念:請求方法是請求行的第一個引數。Http協議支援多種請求方法,在Http/1.1及以上版本中,支援GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT方法。其中最常用的方法則為GET、POST方法。
開發者可針對不同的應用場景使用不同的請求方法,相應的我們也可以根據不同的功能點去推斷所使用的請求方法是什麼。 - GET:用於從伺服器請求指定資源,如請求網頁內容等。請求資料被包含至URL中,而一般情況下瀏覽器/伺服器對接收URL有位數限制,因此請求資料不宜過長。
- POST:用於向伺服器傳送資料,如使用者登入、檔案&表單上傳等。傳送的資料被包含至請求體中,而請求體對資料量無限制,因此也解決了大量資料傳輸的問題。
- HEAD:與GET類似,只不過伺服器在接收HEAD型別的請求時,僅會返回狀態行&響應頭不會返回響應體。
- PUT:與POST類似,用於向伺服器上傳資源。只不過PUT在請求包中往往會指定資源的存放路徑,而POST則由伺服器決定。
- DELETE:用於在伺服器中刪除指定資源。
- OPTIONS:用於查詢伺服器支援的HTTP方法。
- TRACE:用於回顯伺服器收到的請求。
- CONNECT:預留給能夠將連線改為隧道方式的代理伺服器使用,常用於非加密代理伺服器與TLS加密伺服器間的通訊。
- 概念:請求方法是請求行的第一個引數。Http協議支援多種請求方法,在Http/1.1及以上版本中,支援GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT方法。其中最常用的方法則為GET、POST方法。
- 請求頭
- 概念:請求頭由 鍵: 值 組成,每行一對。
- Connection:表示客戶端與伺服器的連線方式。(keep-alive:當前請求完成後保持連線(不斷開TCP連線),close:當前請求完成後關閉連線)
- Accept:表示瀏覽器接受的資料型別。
- Accept-Encoding:表示瀏覽器接受的資料壓縮格式。
- Accept-Language:表示客戶端所偏好的自然語言&區域。
- User-Agent:表示客戶端作業系統&瀏覽器型別。
- Host:表示當前請求訪問的目標地址。
- Authorization:表示使用者身份認證資訊。
- Cookie:當前瀏覽器儲存的Cookie資訊。(常被用於身份鑑權)
- Referer:表示當前請求的來源頁面。(常用於防盜鏈,這也是md寫部落格時外鏈圖片引用失效的原因。)
- Origin:表示當前請求的來源域。(與Referer相比,Referer顯示來源的詳細資訊包括路徑&引數等,而Orgin僅顯示基本來源域資訊。)
- Content-Type:表示客戶端傳送請求體型別。
- Content-Length:表示客戶端傳送請求體長度。
- 請求體:常被應用於POST/PUT請求方法,表示由客戶端向伺服器傳送的資料。
- 響應包格式:狀態行,響應頭,空行,響應體
其中狀態行又由:Http/版本、狀態碼、狀態描述組成,以下為一個典型的Http響應包。
- 狀態行→狀態碼
- 概念:伺服器返回給客戶端的數字,表示伺服器對本次請求的處理結果。
- 1xx:資訊性響應,表示請求已接受,需繼續處理。
- 100:表示伺服器已接受請求初始部分,客戶端可傳送剩餘請求。
- 101:表示伺服器同意協議切換,如Http切換至WebSocket。
- 2xx:成功響應,表示請求已被成功接收。
- 200:表示請求成功,伺服器返回請求資源。(常用於GET&POST)
- 201:表示請求成功,且資源已建立。(常用於POST&PUT)
- 202:表示接收請求,但尚未處理。
- 204:表示請求成功,但未返回內容。(常用於DELETE)
- 3xx:重定向
- 301:永久重定向,常被應用於老頁面不再使用,需使用者訪問新頁面。
- 302:臨時重定向,常被應用於老頁面暫時不使用,需使用者訪問新頁面。
- 303:臨時重定向,同302,但規定請求方法為GET。
- 4xx:客戶端錯誤,表示請求有語法錯誤或無法被實現。
- 400:表示請求語法錯誤或引數不合法。
- 401:表示請求未透過認證。
- 403:表示伺服器收到請求,但拒絕提供服務。
- 404:表示請求資源不存在。
- 405:表示請求方法不被允許。
- 5xx:服務端錯誤,表示伺服器未能實現合法請求。(通俗來說,就是伺服器在處理請求時出錯)
- 500:表示伺服器發生不可預知錯誤。
- 503:常表示伺服器處於超載或維護,暫時無法處理請求,一段時間後可能恢復。
- 505:表示伺服器不支援請求使用的Http協議版本。
- 響應頭
基本同請求頭,這裡額外提一下Set-Cookie:表示伺服器向客戶端設定一個或多個Cookie,客戶端在接收到該響應頭後儲存Set-Cookie值內容。 - 響應體:表示由服務端返回給客戶端的資料。
注:本篇所提客戶端,其大多是指客戶端上的瀏覽器。