2.formdata數據格式和json格式的區別


HTTP content-type
Content-Type(內容類型),一般是指網頁中存在的 Content-Type,用於定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件,這就是經常看到一些 PHP 網頁點擊的結果卻是下載一個文件或一張圖片的原因。

Content-Type 標頭告訴客戶端實際返回的內容的內容類型。

語法格式:

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

常見的媒體格式類型如下:

text/html : HTML格式
text/plain :純文本格式
text/xml : XML格式
image/gif :gif圖片格式
image/jpeg :jpg圖片格式
image/png:png圖片格式
以application開頭的媒體格式類型:

application/xhtml+xml :XHTML格式
application/xml: XML數據格式
application/atom+xml :Atom XML聚合格式
application/json: JSON數據格式
application/pdf:pdf格式
application/msword : Word文檔格式
application/octet-stream : 二進制流數據(如常見的文件下載)
application/x-www-form-urlencoded : 中默認的encType,form表單數據被編碼為key/value格式發送到服務器(表單默認的提交數據的格式)
另外一種常見的媒體格式是上傳文件之時使用的:

multipart/form-data : 需要在表單中進行文件上傳時,就需要使用該格式

formdata和json的區別:
看下面的圖就明白了。
從前端傳來的都是二進制數據
1、content-type是不同的
2、json我們已經序列化好了,而formdata還是需要進行處理,雖然說后端框架已經幫我們處理好了。
formdata:
 

  

 


json:

  

 


在formdata中有種特殊的格式:multipart/form-data

  

 

 

這種格式是傳遞的一條消息,相當於在消息體里面套消息, 給文件上傳提供了便利,它會將表單的數據處理為一條消息,以標簽為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳文件。當上傳的字段是文件時,會有Content-Type來表名文件類型;content-disposition,用來說明字段的一些信息;
由於有boundary隔離,所以multipart/form-data既可以上傳文件,也可以上傳鍵值對,它采用了鍵值對的方式,所以可以上傳多個文件。
multipart/form-data:既可以上傳文件等二進制數據,也可以上傳表單鍵值對,只是最后會轉化為一條信息;x-www-form-urlencoded:只能上傳鍵值對,並且鍵值對都是間隔分開的。


總結:
在Form元素的語法中,EncType表明提交數據的格式,用 Enctype 屬性指定將數據回發到服務器時瀏覽器使用的編碼類型。
下邊是說明:
application/x-www-form-urlencoded : 表單數據被編碼為名稱/值對。這是標准的默認編碼格式。
multipart/form-data : 表單數據被編碼為一條消息,頁上的每個控件對應消息中的一個部分。
application/json: JSON數據格式,將數據進行序列化的一種方式,后端可以直接使用。
text/plain : 窗體數據以純文本形式進行編碼,其中不含任何控件或格式字符。


 補充

form的enctype屬性為編碼方式,常用有兩種: application/x-www-form-urlencoded 和 multipart/form-data , 默認為application/x-www-form-urlencoded 。
當action為get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form數據轉換成一個字串(name1=value1&name2=value2…),然后把這個字串append到url后面,用?分割,加載這個新的url。
當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)。




免責聲明!

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



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