HTTP協議中的報文格式

按照傳輸過程,HTTP 報文分爲請求報文和響應報文。請求報文和響應報文的結構差不多,這裏只對 HTTP 請求報文做一個總結。
HTTP 請求報文由 請求行請求頭請求體(請求數據)、空行 四個部分組成(空行不知道算不算報文的一部分)。

一、請求行

  請求行有三個組成部分:請求方法、請求 URL、HTTP 協議版本組成。這三個部分佔據一行,每個部分之間用空格隔開。

  在HTTP1.0版本中定義了三種請求方法: GET, POST 和 HEAD 方法

  之後HTTP1.1版本新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

  REST設計風格對應的四種請求類型 GET(獲取數據)、POST(添加數據)、PUT(更新數據)、DELETE(刪除數據) 就在這八種之內

1.GET: 請求指定的頁面信息,並返回實體主體。
2.HEAD: 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
3.POST: 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST 請求可能會導致新的資源的建立和/或已有資源的修改。
4.PUT: 從客戶端向服務器傳送的數據取代指定的資源。
5.DELETE: 請求服務器刪除指定的資源。
6.CONNECT: HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。
7.OPTIONS: 允許客戶端查看服務器的性能。
8.TRACE: 回顯服務器收到的請求,主要用於測試或診斷。

  GET 和 POST 的區別在於 GET 請求數據存儲在請求行中,而 POST 請求數據存儲在請求體(BODY) 中

  

二、請求頭

  請求頭部通知服務器有關於客戶端請求的信息,由關鍵字/值對組成,每行一對。

  請求頭有下面幾種常見可選項

 Host: 原始的 URL 中的主機和端口
 Referer: 所指向的 Web 頁的 URL
 Accept: 客戶端可以處理的 MIME 類型
 Accept-Language: 客戶端的首選語言(en、en-us等)
 Accept-Encoding: 客戶端處理的編碼類型(gzip、compress等)
 User-Agent: 客戶端自身信息
 Content-Type: POST 數據的 MIME 類型
 Content-Length: POST 數據的大小(KB)
 Connection:Keep-Alive

 

三、請求體

   POST 方法中發送到服務的表單數據或文件,是一個鍵值對組合。這個與請求頭中 Content-Type 和 Content-Length 密切相關。

   HTTP協議規定 POST 提交的數據必須放在消息主體,但協議並沒有規定數據必須使用什麼編碼方式。

  我們可以通過<form>表單中 enctype 屬性的值告訴服務器表單編碼類型。常見有如下幾種:

    1、application/x-www-form-urlencoded(默認值)

      所有字符都會進行編碼(多個鍵值對之間用 "&" 連接,空格轉換爲 "+" 加號,特殊符號轉換爲 ASCII HEX 值)。

例如:

  Content-Type: application/x-www-form-urlencoded;charset=utf-8
  username=admin&password=admin

    2、multipart/form-data

      該類型用於高效傳輸文件、非ASCII數據和二進制數據,用指定的分隔符 --boundary 將表單數據逐項分隔。每項數據由幾個部分組成:      

      Ⅰ、內容描述信息:Content-Disposition、鍵名等
        例如:Content-Disposition:form-data;name="username"
        例如:Content-Disposition:form-data;name="admin";filename="admin.jpg"
      Ⅱ、內容類型(可選):Content-Type,默認值爲 text/plain。
      Ⅲ、回車(一個空行):用來分隔數據具體的值和其他信息。
      Ⅳ、字段具體內容(文本或二進制)。

例如:

  Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA

  Content-Disposition:form-data;name="username"
  Content-Type:text/plain(
                          (這裏爲空行,表示後面是數據)
  admin(這裏是Value的值)
  --WebKitFormBoundaryrGKCBY7qhFd3TrwA
  Content-Disposition:form-data;name="admin";filename="admin.jpg"(這後面必須換行)
  Content-Type:image/jpeg(這後面必須換行)

  ...二進制..--
  --WebKitFormBoundaryrGKCBY7qhFd3TrwA--

    3、text/plain

      按照鍵值對排列表單數據key1=value1\r\nkey2=value2,不進行轉義。

 

 附錄

HTTP請求報文結構圖:

HTTP請求報文示例:

HTTP響應報文示例:

 

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