POST提交的四種類型


POST提交數據方式

協議規定 POST 提交的數據必須放在消息主體(entity-body)中,但協議並沒有規定數據必須使用什么編碼方式。實際上,開發者完全可以自己決定消息主體的格式,只要最后發送的 HTTP 請求滿足上面的格式就可以。
但是,數據發送出去,還要服務端解析成功才有意義。一般服務端語言如 php、python 等,以及它們的 framework,都內置了自動解析常見數據格式的功能。服務端通常是根據請求頭(headers)中的 Content-Type 字段來獲知請求中的消息主體是用何種方式編碼,再對主體進行解析。所以說到 POST 提交數據方案,包含了 Content-Type 和消息主體編碼方式兩部分。

application/x-www-form-urlencoded.

HTTP的消息體以查詢字符串的方式發送(名/值對,用&分割,名字和值用=連接).其中非字母數字的字符用'%HH'替換。(HH是十六進制)

multipart/form-data

  • 每一部份用分開的MIME消息(文件的類型)表示。

  • 並且,每一部份被特定的字符邊界分開(boundary=---------------------------735323031399963166993862150).這個字符邊界精心挑選一遍不會和內容重復。

  • 每一部份有自己的MIME頭(content-type).通過這個值可以選擇更有效率的方式存儲值,以節省帶寬。(base64或者raw binary)

      POST / HTTP/1.1
      [[ Less interesting headers ... ]]
      Content-Type: multipart/form-data; boundary=---------------------------735323031399963166993862150
      Content-Length: 834
      
      -----------------------------735323031399963166993862150
      Content-Disposition: form-data; name="text1"
      
      text default
      -----------------------------735323031399963166993862150
      Content-Disposition: form-data; name="text2"
      
      aωb
      -----------------------------735323031399963166993862150
      Content-Disposition: form-data; name="file1"; filename="a.txt"
      Content-Type: text/plain
      
      Content of a.txt.
      
      -----------------------------735323031399963166993862150
      Content-Disposition: form-data; name="file2"; filename="a.html"
      Content-Type: text/html
      
      <!DOCTYPE html><title>Content of a.html.</title>
      
      -----------------------------735323031399963166993862150
      Content-Disposition: form-data; name="file3"; filename="binary"
      Content-Type: application/octet-stream
      
      aωb
      -----------------------------735323031399963166993862150--
    

application/json

application/json 這個 Content-Type 作為響應頭大家肯定不陌生。實際上,現在越來越多的人把它作為請求頭,用來告訴服務端消息主體是序列化后的 JSON 字符串。由於 JSON 規范的流行,除了低版本 IE 之外的各大瀏覽器都原生支持 JSON.stringify,服務端語言也都有處理 JSON 的函數,使用 JSON 不會遇上什么麻煩

text/xml

用的比較少了

application/x-www-form-urlencoded VS multipart/form-data兩者區別

  • 文件內容的上傳必須用multipart/form-data

  • 簡單的字符串key-value對(大部分form-data的情況),用application/x-www-form-urlencoded更簡單有效。用multipart就會添加一些不必要的額外字符串了。

    stackovflow 對form編碼的討論
    四種提交的方式


免責聲明!

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



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