[置頂] http協議初探------http request和response報文格式

    搞web的程序猿,應該都知道http協議。http協議有三個版本。http 0.9版本,http 1.0版本,和現在一直在使用的http 1.1版本。RFC 2616 http 1.1 版本的官方規範文檔。另外《http 權威指南》也對http協議進行了很好的闡述。

http 協議是屬於應用層協議,以可靠連接TCP套接字的基礎上設計的應用協議。http1.1默認是開啓長連接的。

 

http request部分報文結構

http 協議規定,http request部分報文分三部分。第一部分是請求行,第二部分是請求頭,第三部分是請求實體。

以下爲通過wireshark抓包後,整理的http 一次request發送的數據信息



 

                  測試環境的http request



 

                  淘寶某個jshttp request

 

http request中規定第一行爲請求行,請求行中第一個單詞爲請求的方法。比如GET(請求服務端數據)post(更新數據到服務端)DELETE(刪除服務端數據)PUT(新增數據到服務端) OPTIONTRACE等等。

第二個單詞爲請求的相對路徑

第三個單詞爲http版本。目前有HTTP/1.1 HTTP/1.0 HTTP/0.9。目前幾乎所有的瀏覽器和httpClient客戶端都是HTTT/1.1。除非你的瀏覽器或者HttClient很老了(建議趕緊升級吧)。

最後以兩個字節\r\n1310也就是回車+換行結束)做爲請求行的標示結束。

注意http規定請求行中,第一個,第二個,第三個單詞間必須要有一個空格

 

大家都知道,通過網絡傳輸,傳輸的都是bit位(由Byte字節轉換),服務端接受到http request部分後,讀出來的數據也是Byte流。服務端是怎樣截取Byte流的,比如什麼時候header結束,http body開始。

通過兩個連續的字節1310(也就是\r\n)。表示http header結束,http body開始,可以查看上圖

http header中通過兩個字節13 10區分每個header。看上圖每個http頭部都是以\r\n結束。Header包含兩部分,一個是headerName,一個是headerValueheaderNameheaderValue間用一個“:”冒號和” ”一個空格分開,比如   
 

 

http body的結束,是通過head中的Content-length指定的,以conten-length的大小,計算body的長度。(當然有些是以傳輸塊指定的bodycontent-length無法指定,則會按相應的規則解析body中字節流,拿到每塊的大小,然後再解析)

 

http response 部分報文結構

http response報文協議結構和http request報文協議結構幾乎相同,第一部分爲應答狀態行,第二部分爲應答頭,第三部分爲應答實體

以下爲通過wireshare抓包後,一次http response返回結果,是上圖,淘寶某js  http request對應的response 部分。



 

 

http response報文規定第一行爲響應狀態行,第一個單詞爲http協議值,比如http/0.9 http/1.0 htpp/1.1 第二個單詞爲響應的狀態碼。比如 200表示服務端處理該請求成功,4XX開頭是客戶端發的http resquest有問題,5XX爲服務端內部處理出錯。3XX爲頁面轉發

http response 頭部字段和http response 實體部分也是通過兩個連續的回車(13)換行(10)符進行分割的。

http response header之間和header內容中的結構和分割和http request header規則一樣。

http response結束,也是通過http response header中的Content-length字段的值確認的(有時,服務端生成動態內容,body的大小無法計算,有時以header中的Transfer-Encoding爲準,http協議規定有Transfer-Encoding,以Transfer-Encoding爲準,沒有Transfer-EncodingContent-length爲準)

 

  • 41d6ed70-0cb1-31d0-8bbf-882a096f5269-thumb.png
  • 大小: 12.1 KB
  • c2c49eec-3420-3a17-9440-ea127b5ce8b5-thumb.png
  • 大小: 15.5 KB
  • cae7f9c9-92ef-3fb1-b7f7-cd9490244190-thumb.png
  • 大小: 3.2 KB
  • a074f425-1b6f-38cf-bd35-170c2b1c8649-thumb.png
  • 大小: 23.2 KB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章