form-data與x-www-form-urlcoded區別

Binge-和时间做朋友發表於2024-08-29

引言

很多同學在使用 postman 工具時,經常搞不清楚 form-data 與 x-www-form-urlcoded 的區別,如下:

multipart/form-dataapplication/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通常是更好的選擇。

相關文章