天天看點

Web服務其二HTTP封包格式說明

HTTP封包詳解

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

一、HTTP請求封包

先上個圖,細細分析

<a href="http://s3.51cto.com/wyfs02/M02/22/DA/wKioL1MpX-qwK1-PAAExXPRpR8M814.jpg" target="_blank"></a>

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保留将來使用

<dl><dt>URL</dt></dl>

一個完整的包括類型、主機名和可選路徑名的統一資源引用名,如: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: 用戶端發送給伺服器端身份辨別

<a href="http://s3.51cto.com/wyfs02/M02/22/DA/wKiom1MphduAsu6XAAM_loPLbc0713.jpg" target="_blank"></a>

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

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

二、響應封包

上圖分析

<a href="http://s3.51cto.com/wyfs02/M02/22/DB/wKiom1MpmHWALc2UAADu14JLceA655.jpg" target="_blank"></a>

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: 質詢,即要求客戶提供帳号和密碼

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

<a href="http://s3.51cto.com/wyfs02/M02/22/DB/wKiom1MprnXiYF18AALhmNtc3OE334.jpg" target="_blank"></a>

實體:位于首部行之後

實體包含了Web用戶端請求的對象。Content-Length标頭及Content-Type标頭用于計算實體的位置、資料類型和資料長度。當Web伺服器接收到Web用戶端的請求封包後,對HTTP請求封包進行解析,并将Web用戶端的請求的對象取出打包,通過HTTP響應封包将資料傳回給Web用戶端,如果出現錯誤則傳回包含對應錯誤的錯誤代碼和錯誤原因的HTTP響應封包。

===================================HTTP封包格式說明到此完畢==============================

本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1379932,如需轉載請自行聯系原作者

繼續閱讀