HTTP請求結構

HTTP報文是面向文本的,報文中的每一個字段都是一些ASCII碼串,各個字段的長度是不確定的。
首先要搞清楚HTTP 請求報文的結構,在發送時才能進行請求得拼接
一個HTTP請求報文由請求行(request line)、請求頭(header)、空行和請求數據4個部分組成。要發送一個完整的HTTP請求必須遵照此格式
1、請求行:
請求方法 URL HTTP協議版本
ex: POST /index.html HTTP/1.1
GET:當客戶端要從服務器中讀取文檔時,使用GET方法。GET方法要求服務器將URL定位的資源放在響應報文的數據部分,回送給客戶端。使用GET方法時,請求參數和對應的值附加在URL後面,利用一個問號(“?”)代表URL的結尾與請求參數的開始,傳遞參數長度受限制。例如,/index.jsp?id=100&op=bind。(get請求參數可見)
POST:當客戶端給服務器提供信息較多時可以使用POST方法。POST方法將請求參數封裝在HTTP請求數據中,以名稱/值的形式出現,可以傳輸大量數據,可用來傳送文件。(POST請求參數不可見)
2、請求頭:
請求頭一般由幾個鍵值對構成,每行一對,用於通知服務器有關客戶端請求的信息,典型的請求頭有:
User-Agent:產生請求的瀏覽器類型。
Accept:客戶端可識別的內容類型列表。
Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。
ex:
Host:www.baidu.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6,en-US;q=0.4,en-GB;q=0.2(q表示用戶偏好設定)
常見的HTTP請求頭
協議頭
說明
示例
狀態
Accept
可接受的響應內容類型(Content-Types)。
Accept: text/plain
固定
Accept-Charset
可接受的字符集
Accept-Charset: utf-8
固定
Accept-Encoding
可接受的響應內容的編碼方式。
Accept-Encoding: gzip, deflate
固定
Accept-Language
可接受的響應內容語言列表。
Accept-Language: en-US
固定
Accept-Datetime
可接受的按照時間來表示的響應內容版本
Accept-Datetime: Sat, 26 Dec 2015 17:30:00 GMT
臨時
Authorization
用於表示HTTP協議中需要認證資源的認證信息
Authorization: Basic OSdjJGRpbjpvcGVuIANlc2SdDE==
固定
Cache-Control
用來指定當前的請求/回覆中的,是否使用緩存機制。
Cache-Control: no-cache
固定
Connection
客戶端(瀏覽器)想要優先使用的連接類型
Connection: keep-alive
Connection: Upgrade
固定
Cookie
由之前服務器通過Set-Cookie(見下文)設置的一個HTTP協議Cookie
Cookie: $Version=1; Skin=new;
固定:標準
Content-Length
以8進製表示的請求體的長度
Content-Length: 348
固定
Content-MD5
請求體的內容的二進制 MD5 散列值(數字簽名),以 Base64 編碼的結果
Content-MD5: oD8dH2sgSW50ZWdyaIEd9D==
廢棄
Content-Type
請求體的MIME類型 (用於POST和PUT請求中)
Content-Type: application/x-www-form-urlencoded
固定
Date
發送該消息的日期和時間(以RFC 7231中定義的"HTTP日期"格式來發送)
Date: Dec, 26 Dec 2015 17:30:00 GMT
固定
Expect
表示客戶端要求服務器做出特定的行爲
Expect: 100-continue
固定
From
發起此請求的用戶的郵件地址
固定
Host
表示服務器的域名以及服務器所監聽的端口號。如果所請求的端口是對應的服務的標準端口(80),則端口號可以省略。
Host: www.itbilu.com:80
Host: www.itbilu.com
固定
If-Match
僅當客戶端提供的實體與服務器上對應的實體相匹配時,才進行對應的操作。主要用於像 PUT 這樣的方法中,僅當從用戶上次更新某個資源後,該資源未被修改的情況下,才更新該資源。
If-Match: "9jd00cdj34pss9ejqiw39d82f20d0ikd"
固定
If-Modified-Since
允許在對應的資源未被修改的情況下返回304未修改
If-Modified-Since: Dec, 26 Dec 2015 17:30:00 GMT
固定
If-None-Match
允許在對應的內容未被修改的情況下返回304未修改( 304 Not Modified ),參考 超文本傳輸協議 的實體標記
If-None-Match: "9jd00cdj34pss9ejqiw39d82f20d0ikd"
固定
If-Range
如果該實體未被修改過,則向返回所缺少的那一個或多個部分。否則,返回整個新的實體
If-Range: "9jd00cdj34pss9ejqiw39d82f20d0ikd"
固定
If-Unmodified-Since
僅當該實體自某個特定時間以來未被修改的情況下,才發送迴應。
If-Unmodified-Since: Dec, 26 Dec 2015 17:30:00 GMT
固定
Max-Forwards
限制該消息可被代理及網關轉發的次數。
Max-Forwards: 10
固定
Origin
發起一個針對跨域資源共享的請求(該請求要求服務器在響應中加入一個Access-Control-Allow-Origin的消息頭,表示訪問控制所允許的來源)。
Origin: http://www.itbilu.com
固定: 標準
Pragma
與具體的實現相關,這些字段可能在請求/迴應鏈中的任何時候產生。
Pragma: no-cache
固定
Proxy-Authorization
用於向代理進行認證的認證信息。
Proxy-Authorization: Basic IOoDZRgDOi0vcGVuIHNlNidJi2==
固定
Range
表示請求某個實體的一部分,字節偏移以0開始。
Range: bytes=500-999
固定
Referer
表示瀏覽器所訪問的前一個頁面,可以認爲是之前訪問頁面的鏈接將瀏覽器帶到了當前頁面。Referer其實是Referrer這個單詞,但RFC製作標準時給拼錯了,後來也就將錯就錯使用Referer了。
Referer: http://itbilu.com/nodejs
固定
TE
瀏覽器預期接受的傳輸時的編碼方式:可使用迴應協議頭Transfer-Encoding中的值(還可以使用"trailers"表示數據傳輸時的分塊方式)用來表示瀏覽器希望在最後一個大小爲0的塊之後還接收到一些額外的字段。
TE: trailers,deflate
固定
User-Agent
瀏覽器的身份標識字符串
User-Agent: Mozilla/……
固定
Upgrade
要求服務器升級到一個高版本協議。
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
固定
Via
告訴服務器,這個請求是由哪些代理髮出的。
Via: 1.0 fred, 1.1 itbilu.com.com (Apache/1.1)
固定
Warning
一個一般性的警告,表示在實體內容體中可能存在錯誤。
Warning: 199 Miscellaneous warning
固定
3、空行:
最後一個請求頭之後是一個空行,發送回車符和換行符,通知服務器以下不再有請求頭
對於一個完整的http請求來說空行是必須的,否則服務器會認爲本次請求的數據尚未完全發送到服務器,處於等待狀態。
4、請求數據
請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用於需要客戶填寫表單的場合。與請求數據相關的最常使用的請求頭是Content-Type和Content-Length。
完整請求EX:
POST /sn/index.php HTTP/1.1
Accept: */*
Accept-Language: zh-cn
host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
Connection:close
(空行)
sn=123&n=asa
在http頭後邊有一空行,空行後邊接着發送post數據,長度通過Content-Length: 12
指出,此post數據中包含兩項
sn=123
n=asa
其中:Content-Type: application/x-www-form-urlencoded 指定POST數據的編碼類型
Content-Length: 12 爲POST數據的長度
EX2:
GET /sn/index.php?sn=123&n=asa HTTP/1.1
Accept: */*
Accept-Language: zh-cn
host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
Connection:close


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章