接口測試 之 【轉(zhuǎn)載】 HTTP協(xié)議基礎(chǔ)知識(二)

該文章為轉(zhuǎn)載,如有侵權(quán) 請聯(lián)系本人郵箱:bxf0321@qq.com



http協(xié)議用于客戶端和服務(wù)器之間的通信,請求訪問資源的一方稱為客戶端,而提供資源響應(yīng)的一方稱為服務(wù)器端。

下面就是客戶端和服務(wù)端之間簡單的通信過程

PS:請求必須從客戶端建立通信,服務(wù)端沒收到請求之前不會發(fā)送響應(yīng)

下面先來說說請求的構(gòu)成:

1)請求方法URI協(xié)議/版本?

2)請求頭(Request Header)?

3)請求正文

下面是一個請求的例子:

GET/sample.jspHTTP/1.1

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

username=jinqiao&password=1234

1)請求方法URI協(xié)議/版本

以上請求中“GET”代表請求方法,“/sample.jsp”表示URI,“HTTP/1.1代表協(xié)議和協(xié)議的版本。

根據(jù)HTTP標準,HTTP請求可以使用多種請求方法。具體的方法以及區(qū)別后面我們介紹。

2)請求頭

Accept 可接受的內(nèi)容類型

Accept-Language 語言

Connection連接狀態(tài)

Host 請求的域名(這里我設(shè)置的是請求本地,當然,關(guān)于域名,就是所謂的URL)

User-Agent 瀏覽器端瀏覽器型號和版本

Accept-Encoding 可接受的壓縮類型 gzip,deflate


3)請求正文

請求頭和請求正文之間是一個空行,它表示請求頭已經(jīng)結(jié)束,接下來的是請求正文。請求正文中可以包含客戶提交的查詢字符串信息:

username=jinqiao&password=1234

在以上的例子中,請求的正文只有一行內(nèi)容。當然,在實際應(yīng)用中,HTTP請求正文可以包含更多的內(nèi)容。


響應(yīng)的構(gòu)成

HTTP響應(yīng)與HTTP請求相似,HTTP響應(yīng)也由3個部分構(gòu)成:

1)狀態(tài)行

2)響應(yīng)頭

3)響應(yīng)正文

在接收和解釋請求消息后,服務(wù)器會返回一個HTTP響應(yīng)消息。

狀態(tài)行由協(xié)議版本、數(shù)字形式的狀態(tài)代碼、及相應(yīng)的狀態(tài)描述,各元素之間以空格分隔。

格式:????HTTP-Version Status-Code Reason-Phrase CRLF

例如:????HTTP/1.1 200 OK?


狀態(tài)代碼:

狀態(tài)代碼由3位數(shù)字組成,表示請求是否被理解或被滿足。

狀態(tài)描述:

狀態(tài)描述給出了關(guān)于狀態(tài)代碼的簡短的文字描述。

狀態(tài)代碼的第一個數(shù)字定義了響應(yīng)的類別,后面兩位沒有具體的分類。

第一個數(shù)字有五種可能的取值:

- 1xx:???指示信息—表示請求已接收,繼續(xù)處理。

- 2xx:???成功—表示請求已經(jīng)被成功接收、理解、接受。

- 3xx:???重定向—要完成請求必須進行更進一步的操作。

- 4xx:???客戶端錯誤—請求有語法錯誤或請求無法實現(xiàn)。

- 5xx:?服務(wù)器端錯誤—服務(wù)器未能實現(xiàn)合法的請求。

狀態(tài)代碼?狀態(tài)描述????說明

? 200 ? ? OK????客戶端請求成功

? 400 ? ? Bad Request???由于客戶端請求有語法錯誤,不能被服務(wù)器所理解。

401 ? ? Unauthonzed???請求未經(jīng)授權(quán)。這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用

? 403 ? ? Forbidden???服務(wù)器收到請求,但是拒絕提供服務(wù)。服務(wù)器通常會在響應(yīng)正文中給出不提供服務(wù)的原因

404 ? ? Not Found???請求的資源不存在,例如,輸入了錯誤的URL。

? 500?????Internal Server Error?服務(wù)器發(fā)生不可預(yù)期的錯誤,導(dǎo)致無法完成客戶端的請求。

? 503 ? ? Service Unavailable???服務(wù)器當前不能夠處理客戶端的請求,在一段時間之后,服務(wù)器可能會恢復(fù)正常。


響應(yīng)頭

響應(yīng)頭可能包括:?

Location:響應(yīng)報頭域用于重定向接受者到一個新的位置。

Server:響應(yīng)報頭域包含了服務(wù)器用來處理請求的軟件信息。它和User-Agent請求報頭域是相對應(yīng)的,前者發(fā)送服務(wù)器端軟件的信息,后者發(fā)送客戶?端軟件(瀏覽器)和操作系統(tǒng)的信息。

Content-Encoding:實體報頭域被使用作媒體類型的修飾符,它的值指示了已經(jīng)被應(yīng)用到實體正文的附加內(nèi)容編碼,因而要獲得Content- Type報頭域中所引用的媒體類型,必須采用相應(yīng)的解碼機制。

Content-Language:實體報頭域描述了資源所用的自然語言。Content-Language允許用戶遵照自身的首選語言來識別和區(qū)分實體。?

Content-Length:實體報頭域用于指明正文的長度,以字節(jié)方式存儲的十進制數(shù)字來表示,也就是一個數(shù)字字符占一個字節(jié),用其對應(yīng)的ASCII碼存儲傳輸。

要注意的是:這個長度僅僅是表示實體正文的長度,沒有包括實體報頭的長度。

Content-Type:實體報頭域用語指明發(fā)送給接收者的實體正文的媒體類型。

Last-Modified:實體報頭域用于指示資源最后的修改日期及時間。

Expires:實體報頭域給出響應(yīng)過期的日期和時間。

Expires實體報頭域使用的日期和時間必須是RFC 1123中的日期格式,例如:

Expires: Thu, 15 Sep 2005 16:00:00 GMT

下面是一個HTTP響應(yīng)的例子:

HTTP/1.1 200 OK


Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:23:42 GMT

Content-Length:112

從上面的例子大家可以對照著進行比對,或者自己可以嘗試在電腦上操作,這里給大家教一個方法:

使用chrome瀏覽器自帶的開發(fā)者工具查看http頭的方法

1.在網(wǎng)頁任意地方右擊選擇審查元素或者按下 shift+ctrl+c或者F12, 打開chrome自帶的調(diào)試工具;

2.選擇network標簽,?刷新網(wǎng)頁(在打開調(diào)試工具的情況下刷新);

3.刷新后在左邊找到該網(wǎng)頁url,點擊 后右邊選擇headers,就可以看到當前網(wǎng)頁的http請求和響應(yīng)



PS:關(guān)于請求和響應(yīng)的首部字段,由于目前http協(xié)議規(guī)定的比較多,這里就不一一列舉了,感興趣的可以百度下具體的http首部字段。。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容