HTTP中的Content-type詳解
Content-Type
Content-Type(MediaType),即是Internet Media Type,互聯(lián)網(wǎng)媒體類型,也叫做MIME類型。在互聯(lián)網(wǎng)中有成百上千中不同的數(shù)據(jù)類型,HTTP在傳輸數(shù)據(jù)對(duì)象時(shí)會(huì)為他們打上稱為MIME的數(shù)據(jù)格式標(biāo)簽,用于區(qū)分?jǐn)?shù)據(jù)類型。最初MIME是用于電子郵件系統(tǒng)的,后來HTTP也采用了這一方案。
在HTTP協(xié)議消息頭中,使用Content-Type來表示請(qǐng)求和響應(yīng)中的媒體類型信息。它用來告訴服務(wù)端如何處理請(qǐng)求的數(shù)據(jù),以及告訴客戶端(一般是瀏覽器)如何解析響應(yīng)的數(shù)據(jù),比如顯示圖片,解析并展示html等等。
Content-Type的格式:
Content-Type:type/subtype ;parameter
- type:主類型,任意的字符串,如text,如果是*號(hào)代表所有;
- subtype:子類型,任意的字符串,如html,如果是*號(hào)代表所有,用“/”與主類型隔開;
- parameter:可選參數(shù),如charset,boundary等。
例如:
- Content-Type: text/html;
- Content-Type: application/json;charset:utf-8;
常見Content-Type
常見的Content-Type有數(shù)百個(gè),下面例舉了一些
- HTML文檔標(biāo)記:text/html;
- 普通ASCII文檔標(biāo)記:text/html;
- JPEG圖片標(biāo)記:image/jpeg;
- GIF圖片標(biāo)記:image/gif;
- js文檔標(biāo)記:application/javascript;
- xml文件標(biāo)記:application/xml;
更多具體內(nèi)容可參考《圖解HTTP》- 附錄D
上面的Content-Type,我們只認(rèn)得就好,但是下面有4種是需要我們清楚他們的區(qū)別及牢記在心的。
application/x-www-form-urlencoded
HTTP會(huì)將請(qǐng)求參數(shù)用key1=val1&key2=val2的方式進(jìn)行組織,并放到請(qǐng)求實(shí)體里面,注意如果是中文或特殊字符如"/"、","、“:" 等會(huì)自動(dòng)進(jìn)行URL轉(zhuǎn)碼。不支持文件,一般用于表單提交。
下面是一個(gè)例子:
- 請(qǐng)求參數(shù)

- http 請(qǐng)求報(bào)文

multipart/form-data
與application/x-www-form-urlencoded不同,這是一個(gè)多部分多媒體類型。首先生成了一個(gè) boundary 用于分割不同的字段,在請(qǐng)求實(shí)體里每個(gè)參數(shù)以------boundary開始,然后是附加信息和參數(shù)名,然后是空行,最后是參數(shù)內(nèi)容。多個(gè)參數(shù)將會(huì)有多個(gè)boundary塊。如果參數(shù)是文件會(huì)有特別的文件域。最后以------boundary–為結(jié)束標(biāo)識(shí)。multipart/form-data支持文件上傳的格式,一般需要上傳文件的表單則用該類型。
下面是一個(gè)例子:
- 請(qǐng)求參數(shù)

- http 請(qǐng)求報(bào)文

application/json
JSON 是一種輕量級(jí)的數(shù)據(jù)格式,以“鍵-值”對(duì)的方式組織的數(shù)據(jù)。這個(gè)使用這個(gè)類型,需要參數(shù)本身就是json格式的數(shù)據(jù),參數(shù)會(huì)被直接放到請(qǐng)求實(shí)體里,不進(jìn)行任何處理。服務(wù)端/客戶端會(huì)按json格式解析數(shù)據(jù)(約定好的情況下)。
- 請(qǐng)求參數(shù)

- http 請(qǐng)求報(bào)文

application/xml 和 text/xml
與application/json類似,這里用的是xml格式的數(shù)據(jù),text/xml的話,將忽略xml數(shù)據(jù)里的編碼格式,參考。
Content-Type的使用
request 的Content-Type
一般我們?cè)陂_發(fā)的過程中需要注意客戶端發(fā)送請(qǐng)求(Request)時(shí)的Content-Type設(shè)置,特別是使用ajax的時(shí)候,如果設(shè)置得不準(zhǔn)確,很有可能導(dǎo)致請(qǐng)求失敗。比如在spring中,如果接口使用了@RequestBody,spring強(qiáng)大的自動(dòng)解析功能,會(huì)將請(qǐng)求實(shí)體的內(nèi)容自動(dòng)轉(zhuǎn)換為Bean,但前提是請(qǐng)求的Content-Type必須設(shè)置為application/json,否正就會(huì)返回415錯(cuò)誤。
注:415 錯(cuò)誤是 Unsupported media type,即不支持的媒體類型。
建議:
- 如果是一個(gè)restful接口(json格式),一般將Content-Type設(shè)置為application/json; charset=UTF-8;
- 如果是文件上傳,一般Content-Type設(shè)置為multipart/form-data
- 如果普通表單提交,一般Content-Type設(shè)置為application/x-www-form-urlencoded
response的Content-Type
服務(wù)端響應(yīng)(Response)的Content-Type最好也保持準(zhǔn)確,雖然一般web開發(fā)中,前端解析響應(yīng)的數(shù)據(jù)不會(huì)根據(jù)Content-Type,并且服務(wù)端一般能自動(dòng)設(shè)置準(zhǔn)確的Content-Type,但是如果亂設(shè)置某些情況下可能會(huì)有問題,比如導(dǎo)出文件,打開圖片等。如果在spring項(xiàng)目里使用@ResponseBody,spring會(huì)將響應(yīng)的Content-Type設(shè)置為application/json;charset=UTF-8;,可能會(huì)導(dǎo)致文件無法導(dǎo)出,需要注意下。
response的Content-Type設(shè)置建議:
- 一般情況下不需要顯示設(shè)置;
- 如果是文件導(dǎo)出,Content-Type 設(shè)置為 multipart/form-data,并且添加一個(gè)Content-Disposition設(shè)置為attachment;fileName=文件.后綴。
注:Content-Disposition是Content-Type的擴(kuò)展,告訴瀏覽器彈窗下載框,而不是直接在瀏覽器里展示文件。因?yàn)橐话銥g覽器對(duì)于它能夠處理的文件類型,如txt,pdf 等,它都是直接打開展示,而不是彈窗下載框。
下面的一個(gè)設(shè)置response的Content-Type的例子:
- 未準(zhǔn)確設(shè)置response的Content-type的情況,客戶端將json數(shù)據(jù)當(dāng)成普通文本
content-type →text/html;charset=UTF-8

- 準(zhǔn)確設(shè)置response的Content-type的情況,客戶端將json數(shù)據(jù)自動(dòng)解析
content-type →application/json;charset=UTF-8

參考
《HTTP 權(quán)威指南》
以上所述是小編給大家介紹的HTTP中的Content-type詳解,希望對(duì)大家有所幫助。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章

HTML img標(biāo)簽和超鏈接標(biāo)簽詳細(xì)介紹
文章介紹了HTML中img標(biāo)簽的使用,包括src屬性(指定圖片路徑)、相對(duì)/絕對(duì)路徑區(qū)別、alt替代文本、title提示、寬高控制及邊框設(shè)置等,本文主要給大家介紹HTML img標(biāo)簽和超鏈2025-06-20HTML中meta標(biāo)簽的常見使用案例(示例詳解)
HTML meta標(biāo)簽用于提供文檔元數(shù)據(jù),涵蓋字符編碼、SEO優(yōu)化、社交媒體集成、移動(dòng)設(shè)備適配、瀏覽器控制及安全隱私設(shè)置,優(yōu)化頁面顯示與搜索引擎索引,本文給大家介紹HTML中meta2025-06-20
input 標(biāo)簽主要用于接收用戶的輸入,隨 type 屬性值的不同,變換其具體功能,本文通過實(shí)例圖文并茂的形式給大家介紹HTML input 標(biāo)簽,感興趣的朋友一起看看吧2025-06-20
html 滾動(dòng)條滾動(dòng)過快會(huì)留下邊框線的解決方案
這篇文章主要介紹了html 滾動(dòng)條滾動(dòng)過快會(huì)留下邊框線的解決方案,解決方法很簡(jiǎn)單,可以將 dialog 單獨(dú)拿出來別放在 transform 的子元素里,需要的朋友可以參考下2025-06-09- 本文將介紹如何使用<img>標(biāo)簽在 HTML 中添加圖片,并展示一些常見的用法和技巧,通過本文的介紹,應(yīng)該掌握了在 HTML 中添加和調(diào)整圖片的基礎(chǔ)知識(shí),感興趣的朋友一起看2025-05-16
- HTML表格用于在網(wǎng)頁上展示數(shù)據(jù),通過標(biāo)簽及其相關(guān)標(biāo)簽來創(chuàng)建,表格由行和列組成,每一行包含一個(gè)或多個(gè)單元格,單元格可以包含文本、圖像、鏈接等元素,本文將詳細(xì)介紹HTML表格2025-03-12
- 本文介紹了三種禁止HTML頁面滾動(dòng)的方法:通過CSS的overflow屬性、使用JavaScript的滾動(dòng)事件監(jiān)聽器以及使用CSS的position:fixed屬性,每種方法都有其適用場(chǎng)景和優(yōu)缺點(diǎn),感興2025-02-24

使用HTML和CSS實(shí)現(xiàn)文字鏤空效果的代碼示例
在 Web 開發(fā)中,文本的視覺效果是提升用戶體驗(yàn)的重要因素之一,通過 CSS 技巧,我們可以創(chuàng)造出許多獨(dú)特的效果,例如文字鏤空效果,本文將帶你一步一步實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文字鏤空2024-11-17
Html去除a標(biāo)簽的默認(rèn)樣式的操作代碼
在Html中,a標(biāo)簽?zāi)J(rèn)的超鏈接樣式是藍(lán)色字體配下劃線,這可能不滿足所有設(shè)計(jì)需求,如需去除這些默認(rèn)樣式,可以通過CSS來實(shí)現(xiàn),本文給大家介紹Html去除a標(biāo)簽的默認(rèn)樣式的操作代碼2024-09-25HTML文本域如何設(shè)置為禁止用戶手動(dòng)拖動(dòng)
在HTML中,可以通過設(shè)置CSS的resize屬性為none,來禁止用戶手動(dòng)拖動(dòng)文本域(textarea)的大小,這種方法簡(jiǎn)單有效,適用于大多數(shù)現(xiàn)代瀏覽器,但需要在老舊瀏覽器中進(jìn)行測(cè)試以確保2024-09-25





