postman中form-data、x-www-form-urlencoded、raw、binary的區別

在平常開發中,一般會由於提交數據的方式不一樣而致使各類各樣的問題,歸根結底是由於未能正確認識到POST方式上傳數據的幾種方式的區別。因此頗有必要研究一下這幾種提交方式的區別。java

  • form-data方式:表示http請求中的multipart/form-data方式,會將表單的數據處理爲一條消息,用分割符隔開,能夠上傳鍵值對或者上傳文件.好比按照以下方式傳輸提交數據:
    image

上傳的數據爲:json

--l_Sh3DQ0_nc-zPblBpi8L3Oq63BWUDLqDqbRpyd 
Content-Disposition: form-data; name="name"
Content-Type: text/plain;charset=UTF-8
Content-Length: 12  
wangjianfeng 
--l_Sh3DQ0_nc-zPblBpi8L3Oq63BWUDLqDqbRpyd Content-Disposition: form-data; name="age" 
Content-Type: text/plain;charset=UTF-8
Content-Length: 2 
20 
--l_Sh3DQ0_nc-zPblBpi8L3Oq63BWUDLqDqbRpyd--

複製代碼

上面數據採用了以--開頭和結尾的字串做爲分割符,把不一樣的字段分割開來。因此能夠同時上傳多個文件以及多個鍵值對。瀏覽器

  • x-www-form-urlencoded: 就是application/x-www-from-urlencoded,會將表單內的數據轉換爲鍵值對,好比,name=java&age = 23
name=wangjianfeng&age=12
複製代碼
  • raw:能夠上傳任意格式的文本,文本不作任何修飾傳到服務端。好比傳一些xml,或者json數據,或者text文本數據。
  • binary:至關於Content-Type:application/octet-stream,只能夠上傳二進制數據,一般用來上傳文件,可是一次只能上傳一個文件。

multipart/form-data與x-www-form-urlencoded的區別bash

  • multipart/form-data:能夠上傳文件或者鍵值對,最後都會轉化爲一條消息
  • x-www-form-urlencoded:只能上傳鍵值對,並且鍵值對都是經過&間隔分開的。

在Form元素的語法中,EncType代表提交數據的格式用 Enctype 屬性指定將數據回發到服務器時瀏覽器使用的編碼類型。
服務器

下邊是說明:
application/x-www-form-urlencoded:窗體數據被編碼爲名稱/值對。這是標準的編碼格式。app

multipart/form-data:窗體數據被編碼爲一條消息,頁上的每一個控件對應消息中的一個部分。post

text/plain:窗體數據以純文本形式進行編碼,其中不含任何控件或格式字符。編碼

補充: form的enctype屬性爲編碼方式,經常使用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認爲application/x-www-form-urlencoded。url

當action爲get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form數據轉換成一個字串(name1=value1&name2=value2...),而後把這個字串append到url後面,用?分割,加載這個新的url。spa

當action爲post時候,瀏覽器把form數據封裝到http body中,而後發送到server。

若是沒有type=file的控件,用默認的application/x-www-form-urlencoded就能夠了。可是若是有type=file的話,就要用到multipart/form-data了。瀏覽器會把整個表單以控件爲單位分割,併爲每一個部分加上Content-Disposition(form-data或者file),Content-Type(默認爲text/plain),name(控件name)等信息,並加上分割符(boundary)。

相關文章
相關標籤/搜索