http請求數據包的格式:頭部(request line + header)+ 數據(data)html
頭部和數據包體經過一個空行來隔開,頭部的格式主要包括請求行+請求頭部。以下圖數據庫
請求行由請求方法字段、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
POST方式:傳輸的數據不在URL裏面出現,而是在數據段裏面出現。可是請求頭部多了Content-Type和Content-Length兩個字段。編碼
請求頭部由(關鍵字:<空格>值)對組成,每行一對,關鍵字和值用英文冒號「:<空格>」分隔。請求頭部通知服務器有關於客戶端請求的信息,典型的請求頭有:spa
User-Agent:產生請求的瀏覽器類型。操作系統
Accept:客戶端可識別的內容類型列表。.net
Host:請求的主機名,容許多個域名同處一個IP地址,即虛擬主機。
下面是GET包的一個例子:傳輸的數據在URL裏
再看看POST包的例子:傳輸的數據在數據段裏面
HTTP響應也由兩個個部分組成,分別是:響應頭(狀態行+消息報頭)+響應正文。
狀態行格式以下:
HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。
1xx:指示信息–表示請求已接收,繼續處理。
2xx:成功–表示請求已被成功接收、理解、接受。
3xx:重定向–要完成請求必須進行更進一步的操做。
4xx:客戶端錯誤–請求有語法錯誤或請求沒法實現。
5xx:服務器端錯誤–服務器未能實現合法的請求。
下面是http響應包的例子
常見錯誤認識:
"GET方式提交的數據最多隻能是1024字節",由於GET是經過URL提交數據,那麼GET可提交的數據量就跟URL的長度有直接關係了。而實際上,URL不存在參數上限的問題,HTTP協議規範沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對於其餘瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操做系統的支持。
注意這是限制是整個URL長度,而不只僅是你的參數值數據長度。
理論上講,POST是沒有大小限制的,HTTP協議規範也沒有進行大小限制,說「POST數據量存在80K/100K的大小限制」是不許確的,POST數據是沒有限制的,起限制做用的是服務器的處理程序的處理能力。
post請求只能適合於頁面到頁面之間的轉移請求,從地址欄中直接輸入地址,發出的請求是沒法造成post請求的,post狀況下,前一個頁面的<input>域被做爲參數傳遞到服務器,get狀況下,參數依靠地址中「?」後面的字符串構成參數。而frame中src屬性指定的地址,偏偏如同從地址欄中輸入的地址同樣,發出的請求是get請求。
GET和POST兩種方法都是將數據送到服務器,但你該用哪種呢?
HTTP標準包含這兩種方法是爲了達到不一樣的目的。POST用於建立資源,資源的內容會被編入HTTP請示的內容中。例如,處理定貨表單、在數據庫中加入新數據行等。
當請求無反作用時(如進行搜索),即可使用GET方法;當請求有反作用時(如在數據庫添加數據行),則用POST方法。一個比較實際的問題是:GET方法可能會產生很長的URL,或許會超過某些瀏覽器與服務器對URL長度的限制。
若符合下列任一狀況,則用POST方法:
若符合下列任一狀況,則用GET方法:
參考:http://blog.csdn.net/firefoxbug/article/details/7677240
http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html