您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python接口自動化測試之http協議的知識點有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python接口自動化測試之http協議的知識點有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
如果將 HTTP協議當做一個人來比較的話,想要深入了解這個人的時候,肯定會先去了解對方的性格特征等。那么 HTTP協議 有什么特征呢?總的來說有以下幾個特點:
1、第一個特點:
HTTP協議支持 客戶/服務端 模式
;因為 HTTP 協議 是TCP、IP 協議簇的一員,與其他成員一樣
,用于客戶端與服務器之間的通信;而客戶/服務器模式
的工作方式是由客戶端向服務器發出請求,服務器端響應請求,并進行響應的服務;所有的HTTP請求
都是從客戶端開始建立通信,服務器端在沒有接收到任何的客戶端請求之前是不會發出響應的;這就是 HTTP協議 的特點之一
。
2、第二個特點:
簡單快速
;客戶端向服務器請求服務的時候,只需要傳入請求的方法和路徑;常用的請求方法有GET、HEAD、POST
(除了這三種之外,還有其他不那么常用的方法,有興趣的小伙伴可以在 HTTP協議狀態及報文組成 一文進行拓展);由于 HTTP協議 簡單,使得 HTTP服務器的程序規模小,因而通信速度很快。
3、第三個特點:
靈活
;之所以靈活是因為 HTTP 允許傳輸任意類型的數據對象;傳輸的類型由Content-Type
加以標記內容類型,支持多種內容格式的傳輸。(兼容性很強)
4、第四個特點:無連接;這里的無連接可不是沒有連接的意思,而是限制每個連接只處理一個請求。服務器處理完客戶端的請求并收到客戶端的應答之后,就斷開連接。采用如此的設計方式呢,能夠節省傳輸時間。
拓展:可能有同學認為一個頁面有很多個 HTTP 請求,來回這樣連接、斷開會效率很低。其實早期這么做的原因是因為產生于互聯網,因此服務器需要處理同時面向全世界 數十萬、上百萬 的網頁訪問。但是每個客戶端(或者說瀏覽器)與服務器之間交換數據的間歇性特別大,所以 HTTP 的傳輸是具備突發性與順時性的,大部分通道實際上會很空閑,無端的占用資源比較浪費。因此呢, HTTP 的設計者有意使用這樣的特點將協議設計為
請求的時候建立連接,請求完就釋放連接。
盡快的將資源釋放出來服務給其他的客戶端,無論怎樣,對于同一個客戶端來說,還是每一次只處理一個請求,所以我們也能看出來 HTTP 協議的另外一個優點,它很專一。(*^▽^*)
5、最后一個特點:無狀態; 無狀態的意思就是說
HTTP協議對于事務的處理沒有記憶能力
;缺少狀態就意味著如果后續處理需要前面的信息,則必須要重傳,這就很可能會導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前的信息時它的響應就比較快。PS:所以 HTTP 的這些特性是既有優點也有缺點。
優點:優點在于解放服務器,每一次請求點到為止不會造成不必要的連接占用。
缺點:缺點在于每一次請求都會傳輸大量的重復內容信息。
所以保持 HTTP 連接的兩種技術就應運而生了,那就是
cookie
與session
。
現在我們知道 HTTP協議 是一種請求與響應的模式,那么就來一起認識一下 HTTP的請求和響應吧,先從 HTTP協議的請求說起。
請求
是發送給接口的數據對象,包括接口的地址(也就是常說的 URL
)、請求的方法(get、post…)、參數、請求頭(Headers)、Cookies、數據等等… 見下圖:
上圖中的報文內容就是典型的 HTTP協議的 post 與 get 請求報文(忽略get請求報文的請求體,那是我瞎編的
。):
1、第一行就是請求行,包含有請求方法、請求URI、HTTP協議及版本(與第二行的 host屬性 相結合形成了完整的 請求URL )
2、中間的部分就是報文頭,包含有若干個屬性;格式就是圖中的
屬性名:屬性值
這樣的格式。服務端根據報文頭來獲取客戶端的信息。3、最下面的部分就是報文體,報文體與報文頭之間必須有一個空行。在類似圖中這樣一個
post 請求
里面將頁面表單里的組件值通過name=admin&passwd=123456
這樣類似的鍵值對的格式編碼形成這樣的格式化串,承載多個請求參數的數據。(不僅僅是報文體可以傳輸數據,請求的 URL 在get 請求方法
的時候也是支持傳遞參數的。)在這里可以看出主要的信息是通過請求的方法、url、與報文的主體來進行傳遞的。這也是 HTTP 的特征之一,簡單快速,同時也會發現報文頭里也包含有很多種信息,這些做一個了解即可。參考 HTTP協議狀態及報文組成 文末的請求頭報文。
熟悉了 HTTP 的請求,再來看一下響應。見下圖:
可以從響應報文的樣式看出,與請求的報文比較相像,他也分為三個部分:請求行對應響應行、請求頭對應響應頭、請求體對應著響應體。
1、響應行分為兩部分:報文協議版本及響應狀態碼。
2、響應頭也分為服務器類型、相應數據類型響應時間等多個參數。
3、響應體就是我們真正想要的干貨,就是請求的最終返回內容。主要針對這個內容進行解析,比如說請求的是一個頁面,這個時候請求的返回就是一個比較大的
HTML
。
更多內容參考 HTTP協議狀態及報文組成 一文的 HTTP請求方法
。
GET方法
用來請求訪問已被 URI
識別的資源,指定的資源經服務器端解析后返回響應內容。(見下圖)
POST方法
與 GET方法
功能類似,一般用來傳輸實體的主體;主要的目的不是為了獲取響應主體的內容,是向 WEB服務器提供表單數據,尤其是大批量的數據
。
POST方法
其實是克服了 GET方法
的一些缺點,通過 POST
請求,數據就不是作為一個 URL 請求的一部分了,而是作為標準數據的格式來傳遞給 WEB服務器
這也就克服了 GET方法
中數據無法保密且數據量有限制的缺點。
接下來就是一些不太常用的一些方法的介紹了。
從客戶端向服務器傳送的數據取代指定的文檔的內容。
PUT方法與POST方法最大的不同的是:PUT是冪等的,而POST是不冪等的。因此,更多的時候我們將
PUT方法用作傳輸資源。
開啟 PUT方法 需要控制權限,否則會造成一定的安全隱患,比如向服務器傳輸帶有惡意 payload 的攻擊腳本。
HEAD方法
幾乎與GET
方法相同,只不過HEAD方法只請求消息報文頭,返回的響應中沒有具體的內容,用于獲取報頭。
請求服務器刪除指定的資源,也就是刪除文件。(一般服務器會控制此方法的權限,否則會造成重大的安全漏洞。)
用來查詢針對請求的 URI 指定的資源支持的方法,就是詢問
請求的URL能夠支持什么方法
。
該方法在實際工作中使用的是非常少的,在安全領域經常會被攻擊者、滲透測試工程師用于信息收集。
用于回顯服務器收到的請求,主要用于測試或診斷。(不常用)
在安全領域經常被用于跨站攻擊。
開啟與客戶端所請求的資源之間的雙向溝通的通道,所以更多的時候是用它來建立隧道。(使用代理的時候就是使用的這個方法)
在我們使用瀏覽覽器向WEB網頁所在服務器發出請求時,當服務器接收我們的請求并響應的情況下。瀏覽器會接收并顯示網頁,此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭(server header)用以響應我們在瀏覽器中的請求。
HTTP狀態碼的英文為HTTP Status Code。
下面是常見的HTTP狀態碼
200 - 請求成功
301 - 資源(網頁等)被永久轉移到其它URL
404 - 請求的資源(網頁等)不存在
500 - 內部服務器錯誤
分類 | 描述 |
---|---|
1** | 信息,服務器收到請求,需要請求者繼續執行操作 |
2** | 成功,操作被成功接收并處理 |
3** | 重定向,需要進一步的操作以完成請求 |
4** | 客戶端錯誤,請求包含語法錯誤或無法完成請求 |
5** | 服務器錯誤,服務器在處理請求的過程中發生了錯誤 |
狀態碼 | 英文名稱 | 中文描述 |
---|---|---|
100 | Continue | 繼續。客戶端應繼續其請求 |
101 | Switching Protocols | 切換協議。服務器根據客戶端的請求切換協議。 只能切換到更高級的協議,例如,切換到HTTP的新版本協議 |
200 | OK | 請求成功。一般用于GET與POST請求 |
201 | Created | 已創建。成功請求并創建了新的資源 |
202 | Accepted | 已接受。已經接受請求,但未處理完成 |
203 | Non-Authoritative Information | 非授權信息。請求成功。但返回的meta信息不在原始的服務器,而是一個副本 |
204 | No Content | 無內容。服務器成功處理,但未返回內容。在未更新網頁的情況下,可確保瀏覽器繼續顯示當前文檔 |
205 | Reset Content | 重置內容。服務器處理成功,用戶終端(例如:瀏覽器)應重置文檔視圖。 可通過此返回碼清除瀏覽器的表單域 |
206 | Partial Content | 部分內容。服務器成功處理了部分GET請求 |
300 | Multiple Choices | 多種選擇。請求的資源可包括多個位置,相應可返回一個資源特征與地址的列表 用于用戶終端(例如:瀏覽器)選擇 |
301 | Moved Permanently | 永久移動。請求的資源已被永久的移動到新URI,返回信息會包括新的URI, 瀏覽器會自動定向到新URI。今后任何新的請求都應使用新的URI代替 |
302 | Found | 臨時移動。與301類似。但資源只是臨時被移動。客戶端應繼續使用原有URI |
303 | See Other | 查看其它地址。與301類似。使用GET和POST請求查看 |
304 | Not Modified | 未修改。所請求的資源未修改,服務器返回此狀態碼時,不會返回任何資源。客戶端通常 會緩存訪問過的資源,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源 |
305 | Use Proxy | 使用代理。所請求的資源必須通過代理訪問 |
306 | Unused | 已經被廢棄的HTTP狀態碼 |
307 | Temporary Redirect | 臨時重定向。與302類似。使用GET請求重定向 |
401 | Unauthorized | 請求要求用戶的身份認證 |
402 | Payment Required | 保留,將來使用 |
403 | Forbidden | 服務器理解請求客戶端的請求,但是拒絕執行此請求 |
404 | Not Found | 服務器無法根據客戶端的請求找到資源(網頁)。通過此代碼,網站設計人員可 設置"您所請求的資源無法找到"的個性頁面 |
405 | Method Not Allowed | 客戶端請求中的方法被禁止 |
406 | Not Acceptable | 服務器無法根據客戶端請求的內容特性完成請求 |
407 | Proxy Authentication Required | 請求要求代理的身份認證,與401類似,但請求者應當使用代理進行授權 |
408 | Request Time-out | 服務器等待客戶端發送的請求時間過長,超時 |
409 | Conflict | 服務器完成客戶端的PUT請求是可能返回此代碼,服務器處理請求時發生了沖突 |
410 | Gone | 客戶端請求的資源已經不存在。410不同于404,如果資源以前有現在被永久刪除了可使用410代碼, 網站設計人員可通過301代碼指定資源的新位置 |
411 | Length Required | 服務器無法處理客戶端發送的不帶Content-Length的請求信息 |
412 | Precondition Failed | 客戶端請求信息的先決條件錯誤 |
413 | Request Entity Too Large | 由于請求的實體過大,服務器無法處理,因此拒絕請求。為防止客戶端的連續請求,服務器可能會 關閉連接。如果只是服務器暫時無法處理,則會包含一個Retry-After的響應信息 |
414 | Request-URI Too Large | 請求的URI過長(URI通常為網址),服務器無法處理 |
415 | Unsupported Media Typ | 服務器無法處理請求附帶的媒體格式 |
416 | Requested range not satisfiabl | 客戶端請求的范圍無效 |
417 | Expectation Failed | 服務器無法滿足Expect的請求頭信息 |
500 | Internal Server Erro | 服務器內部錯誤,無法完成請求 |
501 | Not Implemented | 服務器不支持請求的功能,無法完成請求 |
502 | Bad Gateway | 充當網關或代理的服務器,從遠端服務器接收到了一個無效的請求 |
503 | Service Unavailable | 由于超載或系統維護,服務器暫時的無法處理客戶端的請求。延時的長度可包含在服務器 的Retry-After頭信息中 |
504 | Gateway Time-out | 充當網關或代理的服務器,未及時從遠端服務器獲取請求 |
505 | HTTP Version not supported | 服務器不支持請求的HTTP協議的版本,無法完成處理 |
讀到這里,這篇“Python接口自動化測試之http協議的知識點有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。