HTTP(HyperText Transport Protocol,超文本傳送協議)
HTTP請求報文
http請求數據包的格式:頭部(request line + header)+ 數據(data)
頭部和數據包體通過一個空行來隔開,頭部的格式主要包括請求行+請求頭部。如下圖
請求行
請求行由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔如:
GET /index.html HTTP/1.1。
HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。這裏介紹最常用的GET方法和POST方法。
GET方式:在URL裏面就說明要請求的資源,URL裏面包含參數,“?”後面就是參數,而“?”前面就是URL的結束。“?ip=192.168.156.11&active=on”這種就是GET方式的包,而服務器把客戶端請求的內容在數據段裏面發回給客戶端。
POST方式:傳輸的數據不在URL裏面出現,而是在數據段裏面出現。但是請求頭部多了Content-Type和Content-Length兩個字段。
請求頭部
請求頭部由(關鍵字:<空格>值)對組成,每行一對,關鍵字和值用英文冒號“:<空格>”分隔。請求頭部通知服務器有關於客戶端請求的信息,典型的請求頭有:
User-Agent:產生請求的瀏覽器類型。
Accept:客戶端可識別的內容類型列表。
Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。
下面是GET包的一個例子:傳輸的數據在URL裏
再看看POST包的例子:傳輸的數據在數據段裏面
HTTP響應報文
HTTP響應也由兩個個部分組成,分別是:響應頭(狀態行+消息報頭)+響應正文。
狀態行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。
1xx:指示信息–表示請求已接收,繼續處理。
2xx:成功–表示請求已被成功接收、理解、接受。
3xx:重定向–要完成請求必須進行更進一步的操作。
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現。
5xx:服務器端錯誤–服務器未能實現合法的請求。
下面是http響應包的例子