一、背景知識
1、概述
Http報頭分為通用報頭,請求報頭,響應報頭和實體報頭。
請求方的http報頭結構:通用報頭|請求報頭|實體報頭
響應方的http報頭結構:通用報頭|響應報頭|實體報頭
Accept屬於請求頭,描述客戶端希望接收的 響應body 數據類型
Content-Type屬於實體頭,描述客戶端發送的 body 數據類型
二者合起來,
Accept:text/xml;
Content-Type:text/html
希望接受的數據類型是xml格式,本次請求發送的數據的數據格式是html。
2、Accept代表發送端(客戶端)希望接受的數據類型
比如:Accept:text/xml;
代表客戶端希望接受的數據類型是xml類型
3、Content-Type代表發送端(客戶端|服務器)發送的實體數據的數據類型
Content-Type:text/html; 代表發送端發送的數據格式是html。
Content-Type:Internet Media Type,互聯網媒體類型;也叫MIME類型,在Http協議消息頭中,使用Content-Type來表示請求報文中的數據格式類型。
常見的媒體格式類型如下:
- 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 : <form encType=””>中默認的encType,form表單數據被編碼為key/value格式發送到服務器(表單默認的提交數據的格式)
另外一種常見的媒體格式是上傳文件之時使用的:
- multipart/form-data : 需要在表單中進行文件上傳時,就需要使用該格式
以上就是我們在日常的開發中,經常會用到的若干content-type的內容格式。
二、問題答疑
1、*/*的作用?
"Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*",一大段資源,在最后又加上了*/*,這是為什么?
客戶端支持這些類型,並指定了希望得到類型的優先級,如果沒有,依次表達意願 !
2、服務端側怎么實現的?
SpringMvc為例,提供了多種MessageConverter,用戶也可以自己擴展實現
框架啟動的時候,會裝載能支持的各種MessageConverter
請求來的時候,根據上述設置依次查找本地是否有對應的MessageConverter,如果找到就用找到的MessageConverter返回對應的類型數據。