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