HTTP協議的消息頭:Content-Type和Accept的作用


一、背景知識

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來表示請求報文中的數據格式類型。

類型格式:type/subtype(;parameter)? type 
主類型,任意的字符串,如:text,如果是*號代表所有; 
subtype 子類型,任意的字符串,如:html,如果是*號代表所有; 
parameter 可選,一些參數,如Accept請求頭的q參數, Content-Type的 charset參數。 
例如: Content-Type: text/html;charset:utf-8; 

常見的媒體格式類型如下:

  •     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返回對應的類型數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM