Content-Type 用於指示資源的MIME類型
- 在響應頭中,告訴客戶端實際返回內容的類型
- 在請求頭中,告訴服務器實際發送的數據類型
句法:
Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something
指令
-
media-type - 資源或數據的 MIME type 。
- charset
- 字符編碼標准。
- boundary
- 對於多部分實體,boundary 是必需的,其包括來自一組字符的1到70個字符,已知通過電子郵件網關是非常健壯的,而不是以空白結尾。它用於封裝消息的多個部分的邊界。
這里主要介紹三種常見的media-type: application/x-www-form-urlencoded, multipart/form-data, application/json
我們使用chrome控制台可以看到,有些請求參數在Form Data中,一個在Request Payload中,這是因為Content-Type設置不同。
- application/x-www-form-urlencoded 請求參數在Form Data中,鍵值對,用間隔分開,如: name1=value1&name2=value2
- multipart/form-data 請求參數在Request Payload 中, 可以上傳文件,也可以上傳鍵值對,最后會轉化為一條由boundary字符串分隔的信息體。boundary是一個不可能在數據中出現的字符串。 如:------WebKitFormBoundaryyb1zYhTI38xpQxBK就是boundary
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyb1zYhTI38xpQxBK
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="city_id"
1
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="company_id"
2
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryyb1zYhTI38xpQxBK--
3. application/json 請求參數在Request Payload中, 參數形式:{key:value}
以上三種類型,在服務端獲取參數的方法不同, 因此如果設置錯誤,可能會造成后端接受不到數據的情況。
實際開發中選擇哪種Content-Type呢?
二進制文件選擇:multipart/form-data;
大段的json字符串,適合使用payload,因此可以選擇:application/json
application/x-www-form-urlencoded:最常見,原生form變動,如果不設置enctype屬性,那么默認該類型提交數據。
