天天看點

Http封包格式詳解

HTTP請求封包格式:

HTTP請求封包主要由請求行、請求頭部、請求正文3部分組成

Http封包格式詳解

1,請求行

由3部分組成,分别為:請求方法、URL(見備注1)以及協定版本,之間由空格分隔

請求方法包括GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及擴充方法,當然并不是所有的伺服器都實作了所有的方法,部分方法即便支援,處于安全性的考慮也是不可用的

協定版本的格式為:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1

2,請求頭部

請求頭部為請求封包添加了一些附加資訊,由“名/值”對組成,每行一對,名和值之間使用冒号分隔

常見請求頭如下:

請求頭 說明
Host 接受請求的伺服器位址,可以是IP:端口号,也可以是域名
User-Agent 發送請求的應用程式名稱
Connection 指定與連接配接相關的屬性,如Connection:Keep-Alive
Accept-Charset 通知服務端可以發送的編碼格式
Accept-Encoding 通知服務端可以發送的資料壓縮格式
Accept-Language 通知服務端可以發送的語言

請求頭部的最後會有一個空行,表示請求頭部結束,接下來為請求正文,這一行非常重要,必不可少

3,請求正文

可選部分,比如GET請求就沒有請求正文

GET請求示例:

Http封包格式詳解

POST請求示例:

Http封包格式詳解

HTTP響應封包格式:

HTTP響應封包主要由狀态行、響應頭部、響應正文3部分組成

Http封包格式詳解

1,狀态行

由3部分組成,分别為:協定版本,狀态碼,狀态碼描述,之間由空格分隔

狀态代碼為3位數字,200~299的狀态碼表示成功,300~399的狀态碼指資源重定向,400~499的狀态碼指用戶端請求出錯,500~599的狀态碼指服務端出錯(HTTP/1.1向協定中引入了資訊性狀态碼,範圍為100~199)

這裡列舉幾個常見的:

狀态碼 說明
200                    響應成功
302 跳轉,跳轉位址通過響應頭中的Location屬性指定(JSP中Forward和Redirect之間的差別)
400 用戶端請求有文法錯誤,不能被伺服器識别
403 伺服器接收到請求,但是拒絕提供服務(認證失敗)
404 請求資源不存在
500 伺服器内部錯誤

2,響應頭部

與請求頭部類似,為響應封包添加了一些附加資訊

常見響應頭部如下:

響應頭 說明
Server 伺服器應用程式軟體的名稱和版本
Content-Type 響應正文的類型(是圖檔還是二進制字元串)
Content-Length 響應正文長度
Content-Charset 響應正文使用的編碼
Content-Encoding 響應正文使用的資料壓縮格式
Content-Language 響應正文使用的語言

響應示例:

Http封包格式詳解

PS:

1,URI、URL和URN之間的差別

URI全名為Uniform Resource Indentifier(統一資源辨別),用來唯一的辨別一個資源,是一個通用的概念,URI由兩個主要的子集URL和URN組成

URL全名為Uniform Resource Locator(統一資源定位),通過描述資源的位置來辨別資源

URN全名為Uniform Resource Name(統一資源命名),通過資源的名字來辨別資源,與其所處的位置無關,這樣即使資源的位置發生變動,其URN也不會變化

HTTP規範将更通用的概念URI作為其資源辨別符,但是實際上,HTTP應用程式處理的隻是URI的URL子集

繼續閱讀