1. 程式人生 > >HTTP的請求報文解析 與 響應報文解析 、 HTTP請求報文中 GET 和 POST的區別 和 URL解析

HTTP的請求報文解析 與 響應報文解析 、 HTTP請求報文中 GET 和 POST的區別 和 URL解析

一、什麼是HTTP?

HTTP是超文字傳輸協議

二、HTTP特點?

(1)HTTP是無狀態協議;
(2)HTTP是web服務使用的協議;
(3)HTTP是基於TCP協議的;
(4)HTTP的通訊方式是客戶端-伺服器模式,即C/S模式
(5)HTTP是應用層協議。

三、HTTP的報文格式

HTTP的報文有兩種,分別是請求報文和響應報文

1.請求報文

請求報文是客戶端給伺服器傳送的報文,報文中包含了一些請求的資訊
這裡寫圖片描述

欄位解析

(1)方法:實際上就是一些命令,例如get、post、head等

GET:請求讀取由URL所標誌的資訊
POST:給server新增資訊(例如註釋)
HEAD:請求讀取由URL所標誌的資訊的首部

ps:登入頁面一般都用的是POST請求

GET和POST的區別

GET沒有body
POST有body,body中有若干字串,首部行中的Content_Length標記著body的長度

(2)URL

定義:是統一資源定位符

格式:
這裡寫圖片描述
欄位解釋
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

HTTP的URL格式

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
(3)版本

此欄位是HTTP的版本,HTTP有兩個版本:HTTP1.0和HTTP1.1

(4)首部行

首部行中是請求的屬性,冒號分割的鍵值對(首部欄位名與值可以構成鍵值對),每組屬性之間使用\n分隔,遇到空行表示首部行的結束
ps:在報文中遇到<cr><lf><cr><lf>

,此時就表示首部行結束了

(5)首部行中的一些欄位解釋

Content-Length: 標記著body的長度
User-Agent: 標記瀏覽器型別和作業系統的版本
Contet-Type: 標記著資料型別(text/html等)
Host: 客戶端告知伺服器,所請求的資源是在哪個主機的那個埠上
Cookie: 用於在客戶端儲存少量資訊,通常用於實現會話(session)功能
Accept-Language: 標記著使用者所使用的語言
Keep-Alive:time:標記著連線的時間
Connection:close 此時表示是非持久連線
Connection:keep-alive 此時表示是持久連線

(6)實體主體(Body)

空行後面的內容都是Body,Body允許為空字串,如果Body存在,則在首部行中會有一個欄位Content_Length來標記Body的長度

2.響應報文

響應報文是伺服器給客戶端傳送的,用來回復客戶端的請求
這裡寫圖片描述

欄位解析

(1)版本
與請求報文中的版本欄位的含義一樣,都是標記著HTTP的版本
(2)狀態碼
狀態碼都是由三位數字組成的

1xx:資訊性狀態碼,表示接收的請求正在處理
2xx:成功性狀態碼,請求正常處理完畢

例如:200 表示OK

3xx:重定向狀態碼,表示要完成請求還必須採取進一步的行動

303(edirect):是重定向

4xx:客戶端錯誤狀態碼,表示伺服器無法處理請求

例如:404是找不到網頁或者網頁不存在

5xx:伺服器錯誤狀態碼,表示伺服器處理請求出錯

(3)短語

短語就是用來解釋狀態碼,與狀態碼搭配到一起使用的,例如狀態碼200 的短語就是OK,404的短語就是Not Found

(4)首部行

首部行中是請求的屬性,冒號分割的鍵值對(首部欄位名與值可以構成鍵值對),每組屬性之間使用\n分隔,遇到空行表示首部行的結束
ps:在報文中遇到<cr><lf><cr><lf>,此時就表示首部行結束了

(5)首部行中相關欄位的解釋

Date :表示報文傳送的時間
Last-Modified:表示報文的最後修改時間
Content-Length:標記著Body的長度

(6)實體主體(Body)

空行後面的內容都是Body,Body允許為空字串,如果Body存在,則在首部行中會有一個欄位Content-Length來標記著Body的長度,如果伺服器返回了一個HTML頁面,那麼HTML頁面內容就是在Body中