http報文詳解


HTTP報文詳解

HTTP有兩種報文:請求報文和響應報文,具體介紹如下

一、HTTP請求報文

先上個圖,細細分析

wKioL1MpX-qwK1-PAAExXPRpR8M814.jpg

HTTP請求報文主要包括請求行、請求頭部以及請求的數據(實體)三部分

請求行(HTTP請求報文的第一行)

請求行由方法字段、URL字段和HTTP協議版本字段。其中,方法字段嚴格區分大小寫,當前HTTP協議中的方法都是大寫,方法字段如下介紹如下:

方法字段

①GET:請求獲取Request-URI(URI:通用資源標識符,URL是其子集,URI注重的是標識,而URL強調的是位置,可以將URL看成原始的URI),所標識的資源

②POST:在Request-URI所標識的資源后附加新的數據;支持HTML表單提交,表單中有用戶添入的數據,這些數據會發送到服務器端,由服務器存儲至某位置(例如發送處理程序)

③HEAD:請求Request-URI所標識的資源響應消息報頭,HEAD方法可以在響應時不返回消息體。

④PUT:與GET相反,請求服務器存儲一個資源,並用Request-URI做為其標識;例如發布系統。

⑤DELETE:請求刪除URL指向的資源

⑥OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項

⑦TRACE:跟蹤請求要經過的防火牆、代理或網關等,主要用於測試或診斷

⑧CONNECT保留將來使用

URL

一個完整的包括類型、主機名和可選路徑名的統一資源引用名,如:http://www.example.com/path/to/file.html

請求頭部:位於請求行的下面

請求報文中常見的標頭有:

Connetion標頭(連接管理)、Host標頭(指定請求資源的主機)、Range標頭(請求實體的字節范圍)、User-Agent標頭(包含發出請求的用戶信息)、Accept標頭(首選的媒體類型)、Accept-Language(首選的自然語言)

HTTP首部:

通用首部:請求和響應都可以使用的;

Connection:定義C/S之間關於請求/響應的有關選項
對於http/1.0, Connection: keep-alive
Via: 顯示了報文經過的中間節點

Cache-Control: 緩存指示

實體首部:用於指定實體屬性

實體主體用於POST方法中。用戶向Web服務器提交表單數據的時候,需要使用POST方法,此時主體中包含用戶添寫在表單的各個屬性字段的值,當Web服務器收到POST方法的HTTP請求報文后,可以從實體中取出需要的屬性字段的值。

也就是說,當用戶通過Web瀏覽器向Web服務器發送請求時,Web瀏覽器會根據用戶的具體請求來選擇不同的HTTP請求方法,再將相應的URL和HTTP協議版本及相關的標頭填入頭部行中,若是POST方法,還會將相關的表單數據填入實體主體中,產生一個HTTP請求報文,然后將這個報文發送給Web服務器。

 

Location: 資源的新位置
Allow: 允許對此資源使用的請求方法
1、內容首部:
Content-Encoding:支持的編碼
Content-Language:支持的自然語言
Content-Length:文本長度
Content-Location:資源所在位置
Content-Range:在整個資源中此實體表示的字節范圍

Content-Type:主體的對象類型

2、緩存首部:
ETag: 實體標簽
Expires: 過期期限
Last-Modified: 上一次的修改時間

請求首部:

Host: 請求的主機名和端口號,虛擬主機環境下用於不同的虛擬主機
Referer:指明了請求當前資源的原始資源的URL

User-Agent: 用戶代理,使用什么工具發出的請求

1、Accept首部:用戶標明客戶自己更傾向於支持的能力
Accept: 指明服務器能發送的媒體類型
Accept-Charset: 支持使用的字符集
Accept-Encoding: 支持使用的編碼方式

Accept-Language: 支持使用語言

2、條件請求首部:
Expect: 告訴服務器能夠發送來哪些媒體類型
If-Modified-Since: 是否在指定時間以來修改過此資源
If-None-Match:如果提供的實體標記與當前文檔的實體標記不符,就獲取此文檔
跟安全相關的請求首部:
Authorization: 客戶端提交給服務端的認證數據,如帳號和密碼

Cookie: 客戶端發送給服務器端身份標識

wKiom1MphduAsu6XAAM_loPLbc0713.jpg

上圖展示一般請求所帶有的屬性

=====================================================================================

二、響應報文

上圖分析

wKiom1MpmHWALc2UAADu14JLceA655.jpg

HTTP響應報文同樣也分為三部分,有狀態行、首部行、實體

狀態行:HTTP響應報文的第一行

狀態行包括三個字段:協議版本、狀態碼與原因短語。

狀態碼:

1xx:

這一類型的狀態碼,代表請求已被接受,需要繼續處理。這類響應是臨時響應,只包含狀態行和某些可選的響應頭信息,並以空行結束。

2xx:

這一類型的狀態碼,代表請求已成功被服務器接收、理解、並接受。

3xx:

這類狀態碼代表需要客戶端采取進一步的操作才能完成請求。通常,這些狀態碼用來重定向,后續的請求地址(重定向目標)在本次響應的Location域中指明。

4xx:

這類的狀態碼代表客戶端類的錯誤

5xx:

服務器類的錯誤

常遇到的狀態碼說明

 

狀態碼 狀態描述 簡要說明
200 OK 客戶端請求成功
201 Created  請求已經被實現,而且有一個新的資源已經依據請求的需要而創建,且其URI已經隨Location頭信息返回。
301 Moved Permanently 被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若干個URI之一
302 Found 在響應報文中使用首部“Location: URL”指定臨時資源位置
304 Not Modified 條件式請求中使用
403 Forbidden 請求被服務器拒絕
404 Not Found 服務器無法找到請求的URL
405 Method Not Allowed 不允許使用此方法請求相應的URL
500 Internal Server Error 服務器內部錯誤
502 Bad Gateway 代理服務器從上游收到了一條偽響應
503 Service Unavailable 服務器此時無法提供服務,但將來可能可用
505 HTTP Version Not Supported 服務器不支持,或者拒絕支持在請求中使用的HTTP版本。這暗示着服務器不能或不願使用與客戶端相同的版本。響應中應當包含一個描述了為何版本不被支持以及服務器支持哪些協議的實體。

響應首部(首部行):位於響應報文狀態行之后

Date標頭:消息產生的時間

Age標頭:(從最初創建開始)響應持續時間

Server標頭: 向客戶端標明服務器程序名稱和版本

ETage標頭:不透明驗證者

Location標頭:URL備用的位置

Content-Length標頭:實體的長度

Content-Tyep標頭:實體的媒體類型

協商首部:
Accept-Ranges: 對當前資源來講,服務器所能夠接受的范圍類型
Vary: 首部列表,服務器會根據列表中的內容挑選出最適合的版本發送給客戶端
跟安全相關的響應首部:
Set-Cookie: 服務器端在某客戶端第一次請求時發給令牌

WWW-Authentication: 質詢,即要求客戶提供帳號和密碼

響應首部一般包含如下內容:

wKiom1MprnXiYF18AALhmNtc3OE334.jpg

實體:位於首部行之后

實體包含了Web客戶端請求的對象。Content-Length標頭及Content-Type標頭用於計算實體的位置、數據類型和數據長度。當Web服務器接收到Web客戶端的請求報文后,對HTTP請求報文進行解析,並將Web客戶端的請求的對象取出打包,通過HTTP響應報文將數據傳回給Web客戶端,如果出現錯誤則返回包含對應錯誤的錯誤代碼和錯誤原因的HTTP響應報文。

 

轉自https://blog.51cto.com/essun/1379932


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM