post請求格式


  • application/x-www-form-urlencoded       基本的請求類似上面這樣,數據的編碼方式采用 key1=val1&key2=val2 的形式,對其中的鍵值對都需要使用 URL Encode 編碼一下。其實就是和 GET 請求的數據提交格式是一樣的,只不過位置從 Request URL 上換到了 Request Body 里。這種格式結構簡單,但對於數據層級較深的情況,比如一些有復雜層級關系的接口數據,這種方式就顯得有點力不從心了。另一方面,對於需要上傳二進制數據(比如圖像、音頻等文件),這種方式就不那么高效了,而且對於非 ASCII 碼的數據就丟失了,所以傳文件的情況就不能使用這種方式。適用場景:數據量不大、數據層級不深的情況下強烈建議這種數據提交格式。
  • multipart/form-data    

    當你需要提交文件、非 ASCII 碼的數據或者是二進制流數據,則使用這種提交方式。類似下面這個請求示例:

    1. POST http://www.example.com HTTP/1.1
    2. Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryPAlLG7hJKNYc4ft3
    3. ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
    4. Content-Disposition: form-data; name="text"demo
    5. ------WebKitFormBoundaryPAlLG7hJKNYc4ft3
    6. Content-Disposition: form-data; name="file"; filename="demo.png"Content-Type: image/png
    7. ------WebKitFormBoundaryPAlLG7hJKNYc4ft3--

    第二行指定編碼方式 Content-Type 為 multipart/form-data,緊接着生成一個分界線 boundary 即 ----WebKitFormBoundaryPAlLG7hJKNYc4ft3,又臭又長的目的是為了避免和 Body 正文內容有沖突,它的作用是用來分隔不同的字段。

    Body 體分為多個結構類似的部分,每一部分以 --boundary 開頭,因為本次請求生成的 boundary 為 ----WebKitFormBoundaryPAlLG7hJKNYc4ft3,所以最終是 ------WebKitFormBoundaryPAlLG7hJKNYc4ft3。接着是描述內容的元信息,包括字段名稱,如果是文件則還有文件名稱和文件類型。接着留一空行,然后才是字段值。什么時候結束呢,以 --boundary-- 標志結束。

    這種方式本就是專為上傳文件的場景設計的,雖然你也可以使用這種方式傳遞普通數據,但無疑會增加不少數據包的大小(這么多 boundary 還是有不少空間占用的)。

    適用場景:文件上傳

  • application/json   

    很明顯在 JSON 格式火之前,肯定沒有它的,前面說到使用什么提交數據方式是沒有硬性規定的,所以在 JSON 格式火了以后,尤其以其優秀的數據結構表達能力,逐漸流行開來,現在我們對它完全不會陌生。

    1. POST http://www.example.com HTTP/1.1 
    2. Content-Type: application/json;charset=utf-8{"name":"xfly","age": 24, "hobby":["x","xx","xxx"]}

    適用場景:數據結構較復雜,層級較深的情況。


  • 免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM