目錄
介紹
HTTP狀態碼
HTTP報文
請求方法
HTTP版本
HTTP標頭
通用標頭
請求標頭
響應標頭
get 編碼
post 編碼
RESTful風格
HTTPS
?
絕大多數的Web服務接口都是基于HTTP協議進行通信的,包括RESTful API和SOAP等。了解HTTP協議可以幫助測試人員理解接口的請求和響應格式,從而更好地進行接口測試
介紹
HTTP 協議(超文本傳輸協議)是服務端傳送超文本到前端的傳輸協議,傳送的數據一般包括 HTML 文件、圖片、文字等。HTTP 協議工作在前端到服務端的架構上,App 端或者 Web 瀏覽器端通過 URL 或者接口向服務端發送請求,服務端接收到前端的請求后,向前端發送響應信息
HTTP狀態碼
- 1xx(信息提示):服務器接收到請求并正在處理。
-
- 100 Continue:客戶端可以繼續發送請求。
- 101 Switching Protocols:服務器正在切換協議。
- 2xx(成功):請求被成功接收、理解和處理。
-
- 200 OK:請求成功,服務器返回所請求的資源。
- 201 Created:請求已成功處理,并創建了新的資源。
- 204 No Content:服務器成功處理請求,但沒有返回任何內容。
- 3xx(重定向):需要進一步操作以完成請求。
-
- 301 Moved Permanently:所請求的資源已永久移動到新位置。
- 302 Found:所請求的資源暫時移動到新位置。
- 304 Not Modified:客戶端緩存的資源是最新的,無需重新下載。
- 303:永久重定向
- 4xx(客戶端錯誤):請求包含語法錯誤或無法完成請求。
-
- 400 Bad Request:請求無效,服務器無法理解。
- 401 Unauthorized:請求未經授權。
- 403 Forbidden:服務器拒絕請求訪問。
- 404 Not Found:所請求的資源不存在。
- 5xx(服務器錯誤):服務器在處理請求時發生錯誤。
-
- 500 Internal Server Error:服務器內部錯誤。
- 502 Bad Gateway:服務器作為網關或代理,從上游服務器接收到無效響應。
- 503 Service Unavailable:服務器暫時無法處理請求
401和403的區別?
401狀態碼表示客戶端請求需要進行身份驗證,而此時客戶端未提供憑據或提供的憑據不正確,客戶端需要重新進行身份驗證。
403狀態碼表示客戶端請求被禁止,服務端明確告知客戶端這個請求是不被允許的,客戶端無需重新進行身份驗證。
要想解決401狀態碼問題,需要首先確認賬號密碼是否正確,其次檢查服務端身份驗證的代碼是否能夠正確調用。如果服務端沒有進行身份驗證,需要根據業務規則對接口進行修改,讓其進行身份驗證。
要想解決403狀態碼問題,需要先確認客戶端訪問的資源是否有權限訪問,如果沒有權限,需要根據業務規則修改接口權限配置。
HTTP報文
HTTP協議主要由三大部分組成:
- 起始行:由方法、URL字段和HTTP版本字段組成
- 頭部字段
- 正文消息
(起始行和頭部字段,合并稱為請求頭或響應頭)
請求方法
- GET:從服務器獲取資源。該請求方法不應該對服務器上的資源做任何修改,只允許讀取數據。
- POST:向服務器添加新的資源。該請求方法對服務器上的資源做出修改,并在服務器上創建新資源。
- PUT:向服務器更新某個資源。該請求方法對特定資源進行完全替換,如果沒有找到該資源,則創建一個新的。
- DELETE:從服務器刪除指定資源。
- HEAD:與GET類似,但僅返回響應頭部信息,不返回響應正文(用于獲取資源的元信息)。
- OPTIONS:獲取Web服務器所支持的HTTP請求方法列表。
- CONNECT:HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。
- TRACE:回顯服務器收到的請求,用于測試或診斷。
HTTP版本
- HTTP1.0
- HTTP1.1
- HTTP2.0
HTTP標頭
通用標頭
請求標頭
Accept:告知客戶端能夠接收的MIME類型是什么
Accept-Charset:客戶端能夠接受的字符編碼
Accept-Encoding:客戶端希望服務端返回的內容編碼
Accept-Language:客戶端希望服務端返回的語言類型
Authorization:請求頭用于向服務器認證用戶代理的憑據,通常用在服務器以401未經授權狀態和WWW-Authenticate標頭響應之后,啥意思呢? 你不明白的話我畫張圖給你看
Host:指明了服務器的域名
User-Agent:將創建請求的瀏覽器和用戶代理名稱等信息傳達給服務器;Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
響應標頭
get 編碼
application/x-www-form-urlencoding
post 編碼
1、application/x-www-form-urlencoded (默認)
1、multipart/form-data (上傳文件)
2、application/json (用來告訴服務端消息主體是序列化后的 JSON 字符串)
3、text/xml:是一種使用 HTTP 作為傳輸協議,XML 作為編碼方式的遠程調用規范。 XML 結構還是過于臃腫,一般場景用 JSON 會更靈活方便。
RESTful風格
RESTful風格是一種基于HTTP協議的Web服務架構,它使用HTTP的GET、POST、PUT、DELETE等方法來實現對資源的操作。它強調利用URI(統一資源標識符)來唯一地標識資源,通過HTTP報文中的動詞和請求頭來操作資源,而不是通過某些特定的RPC(遠程過程調用)機制進行通信。RESTful架構通常采用JSON或XML格式作為數據傳輸格式。
在RESTful架構中,資源的狀態可以使用HTTP狀態碼進行表示,如200表示請求成功,404表示未找到資源等。同時,RESTful還要求服務端無狀態化,即服務端不記錄用戶狀態信息,每次請求都包含足夠的信息來描述請求。
使用RESTful架構,可以使得Web應用程序更加簡單、高效、可伸縮、易于維護。目前,RESTful已經成為很多互聯網公司API設計的首選。
HTTPS
HTTPS為了解決HTTP明文傳輸,也沒有用戶驗證,以及未驗證報文完整性的問題
HTTPS 的全稱是 Hypertext Transfer Protocol Secure ,它用來在計算機網絡上的兩個端系統之間進行 安全的交換信息(secure communication) ,它相當于在 HTTP 的基礎上加了一個 Secure安全 的詞眼,那么我們可以給出一個 HTTPS 的定義: HTTPS 是一個在計算機世界里專門在兩點之間安全的傳輸文字、圖片、音頻、視頻等超文本數據的約定和規范。 HTTPS 是 HTTP 協議的一種擴展它本身并不保傳輸的證安全性,那么誰來保證安全性呢? 在 HTTPS 中,使用 傳輸層安全性(TLS)或安全套接字層(SSL) 對通信協議進行加密。也就是 HTTP + SSL(TLS) = HTTPS。
HTTPS 協議提供了三個關鍵的指標
- 加密(Encryption), HTTPS 通過對數據加密來使其免受竊聽者對數據的監聽,這就意味著當用戶在瀏覽網站時,沒有人能夠監聽他和網站之間的信息交換,或者跟蹤用戶的活動,訪問記錄等,從而竊取用戶信息。
- 數據一致性(Data integrity),數據在傳輸的過程中不會被竊聽者所修改,用戶發送的數據會完整 的傳輸到服務端,保證用戶發的是什么,服務器接收的就是什么。
- 身份認證(Authentication) ,是指確認對方的真實身份,也就是 證明你是你 (可以比作人臉識別)它可以防止中間人攻擊并建立用戶信任
SSL/TLS
SSL:安全套接字層,位于OSI七層網絡模型中的第五層。后面更名為TLS
TLS,用于兩個通信程序之間提供保密性和數據完整性
HTTPS并不是一項新的應用層協議,只是HTTP通信接口部分由SSL和TLS替代而已。通常情況下,HTTP會先和直接和TCP進行通信。在使用SSL的HTTPS后,則先和SSL通信,接著再由SSL和TCP進行通信。也就是HTTPS是身披一層SSL的HHTP