引言
很多同學在使用 postman 工具時,經常搞不清楚 form-data 與 x-www-form-urlcoded 的區別,如下:
multipart/form-data
和 application/x-www-form-urlencoded
是兩種常用的 HTTP 請求內容型別(Content-Type),它們用於在 HTTP請求中傳送資料,但是它們之間存在一些區別。
區別
資料格式
application/x-www-form-urlencoded
:這是一種非常簡單的編碼方式,用於將表單資料以鍵值對的形式傳送。資料被編碼為URL編碼的文字,即每個鍵和值被轉換為key=value
的形式,並且這些鍵值對透過&
字元連線起來。這種方式適用於傳送ASCII字元資料。
multipart/form-data
:這種格式用於傳輸檔案和二進位制資料。它將資料分割成多個部分,每個部分可以包含不同型別的資料(如文字、檔案等)。每部分都有自己的內容型別和內容描述。這種格式通常用於檔案上傳。
用途
application/x-www-form-urlencoded
:主要用於傳送簡單的表單資料,如登入表單或搜尋查詢。
multipart/form-data
:主要用於檔案上傳和更復雜的表單資料傳輸,因為它可以包含檔案和其他二進位制資料。
編碼方式
application/x-www-form-urlencoded
:資料在傳送前會被編碼,以確保資料在傳輸過程中不會損壞。例如,空格被編碼為+
,特殊字元被編碼為%HH
(HH是字元的十六進位制值)。
multipart/form-data
:資料以二進位制形式傳輸,因此不需要進行URL編碼。
邊界(Boundary)
multipart/form-data
:在請求體中,每個部分之間有一個邊界分隔符(boundary),這是一個唯一的字串,用於區分不同的部分。這個邊界不會在任何部分的資料中出現。
application/x-www-form-urlencoded
:不需要邊界分隔符,因為資料是連續的。
HTTP方法
兩種內容型別都可以用於POST
請求,但application/x-www-form-urlencoded
也可以用於GET
請求,儘管這不是最佳實踐,因為它可能會在URL中暴露敏感資料。
瀏覽器支援
幾乎所有的瀏覽器都支援這兩種內容型別,但是multipart/form-data
在處理檔案上傳時更為常見。
伺服器端處理
伺服器端的解析和處理通常對multipart/form-data
更為複雜,因為伺服器需要解析多個部分並處理不同的內容型別。
總結
在實際應用中,選擇哪種內容型別取決於你需要傳輸的資料型別和應用場景。如果你需要上傳檔案或者傳送包含檔案的複雜表單,你應該使用multipart/form-data
。如果你只是傳送簡單的文字資料,application/x-www-form-urlencoded
通常是更好的選擇。