表單 x-www-form-urlencoded 與 multipart/form-data 區別

Sparkfly發表於2019-08-19

如何正確選擇 FormContent-type 型別?

  • x-www-form-urlencoded,表單預設的 Content-type 型別,支援 ASCII-text 文字內容
  • multipart/form-data,允許提交表單包含: filesnon-ASCII-textBinary 型別資料

application/x-www-form-urlencoded

當表單使用 application/x-www-form-urlencoded 時,需要對引數進行urlencode 編碼序列化

如,表單提交引數(key-value)為:

param1:website
param2:https://www.google.com

經過 urlencode 編碼後:

param1:website
param2:https%3A%2F%2Fwww.google.com

再經過序列化,得到結果

param1=website&param2=https%3A%2F%2Fwww.google.com

multipart/form-data

一個 multipart/form-data 訊息體,包含多個塊組成,每個塊代表一個有效的表單控制元件,並使用 boundary 的字串分割:

  • 第一部分,Content-Disposition: form-data 引數名稱,如,name="my_control
  • 第二部分,Content-Type: text/plainContent-Type: image/png
  • 第三部分,訊息內容

例如表單:

<FORM action="http://server.com/cgi/handle"
       enctype="multipart/form-data"
       method="post">
   <P>
   What is your name? <INPUT type="text" name="submit-name"><BR>
   What files are you sending? <INPUT type="file" name="files"><BR>
   <INPUT type="submit" value="Send">
   <INPUT type="reset">
</FORM>

假設,submit-name 輸入 Larry 文字,files 選擇檔案 file1.txt

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

--AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--AaB03x--

參考文獻:https://www.w3.org/TR/html401/interact/for...

相關文章