HTTP報文詳解
HTTP有兩種報文:請求報文和響應報文,具體介紹如下
一、HTTP請求報文
先上個圖,細細分析
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指向的資源
⑦TRACE:跟蹤請求要經過的防火牆、代理或網關等,主要用於測試或診斷
⑧CONNECT保留將來使用
- URL
一個完整的包括類型、主機名和可選路徑名的統一資源引用名,如:http://www.example.com/path/to/file.html
請求頭部:位於請求行的下面
請求報文中常見的標頭有:
Connetion標頭(連接管理)、Host標頭(指定請求資源的主機)、Range標頭(請求實體的字節范圍)、User-Agent標頭(包含發出請求的用戶信息)、Accept標頭(首選的媒體類型)、Accept-Language(首選的自然語言)
通用首部:請求和響應都可以使用的;
Cache-Control: 緩存指示
實體首部:用於指定實體屬性
實體主體用於POST方法中。用戶向Web服務器提交表單數據的時候,需要使用POST方法,此時主體中包含用戶添寫在表單的各個屬性字段的值,當Web服務器收到POST方法的HTTP請求報文后,可以從實體中取出需要的屬性字段的值。
也就是說,當用戶通過Web瀏覽器向Web服務器發送請求時,Web瀏覽器會根據用戶的具體請求來選擇不同的HTTP請求方法,再將相應的URL和HTTP協議版本及相關的標頭填入頭部行中,若是POST方法,還會將相關的表單數據填入實體主體中,產生一個HTTP請求報文,然后將這個報文發送給Web服務器。
Content-Type:主體的對象類型
請求首部:
User-Agent: 用戶代理,使用什么工具發出的請求
Accept-Language: 支持使用語言
Cookie: 客戶端發送給服務器端身份標識
上圖展示一般請求所帶有的屬性
=====================================================================================
二、響應報文
上圖分析
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標頭:實體的媒體類型
WWW-Authentication: 質詢,即要求客戶提供帳號和密碼
響應首部一般包含如下內容:
實體:位於首部行之后
實體包含了Web客戶端請求的對象。Content-Length標頭及Content-Type標頭用於計算實體的位置、數據類型和數據長度。當Web服務器接收到Web客戶端的請求報文后,對HTTP請求報文進行解析,並將Web客戶端的請求的對象取出打包,通過HTTP響應報文將數據傳回給Web客戶端,如果出現錯誤則返回包含對應錯誤的錯誤代碼和錯誤原因的HTTP響應報文。