当浏览器发起 http 请求时,有一个请求头关于媒体格式的字段,浏览器会根据请求链接的内容帮我们自动加上,那就是 Accept 字段,它的作用告诉 WEB 服务器自己接受的 MIME 类型,属于请求头,而服务器接收到该信息后,使用 Content-Type 应答头通知客户端它选择的 MIME 类型,属于实体头,服务端不返回该字段时浏览器会按 accept 里的属性顺序对返回的数据进行解析。Content-Type 也可以用在请求头信息中,用来指定报文主体的类型。
注:MIME 的全名叫多用途互联网邮件扩展(Multipurpose Internet Mail
Extensions),MIME 的常见形式是一个主类型加一个子类型,用斜线分隔。比如 text/html、application/javascript、image/png 等,MIME 和操作系统的文件拓展名有共同的用途,就是用来标注信息的格式,但应用场景完全不同,一个是操作系统中标注文件的,一个是邮件和 HTTP 协议中用来标注网络数据的。
常见的 MIME 类型:
超文本标记语言文本 .html => text/html
普通文本 .txt => text/plain
GIF 图形 .gif =>image/gif
JPEG 图形 .jpeg,.jpg => image/jpeg
au 声音文件 .au => audio/basic
MPEG 文件 .mpg,.mpeg => video/mpeg
AVI 文件 .avi => video/x-msvideo
GZIP 文件 .gz => application/x-gzip
语法:<MIME_type> / <MIME_subtype>; parameter
accept 示例:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/ ;q=0.8
注:多个属性用逗号隔开,默认从左往右匹配,q 是权重因子,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容,若没有指定 q 值,则默认为 1,若被赋值为 0,则用于提醒服务器哪些是浏览器不接受的内容类型
content-type 示例(请求头):
一、Content-Type: application/x-www-form-urlencoded
一般是 post 请求才需要在请求头信息中加上 content-type,显示此 HTTP 请求提交的内容类型,在最早的 post 请求中,表单数据向服务器提交时所采用的编码类型,默认的缺省值就是“application/x-www-form-urlencoded”,参数都是通过键值对方式传递。该方式对于文件上传有很多不便
body 的内容如下:Form Data:number=1&goodsId=1405140&skuId=1405140-68a3e5516d7a7dc21fbe0e7ee13bfc1c&innerSource=DETAIL
二、Content-Type:multipart/form-data
在 1995 年的时候,content-type 扩充了 multipart/form-data 用以支持向服务器发送二进制数据,此种方式多用于文件上传,表单数据都保存在 http 的正文部分,很多情况下都会有批量上传,所以各个表单项之间用 boundary 的值作为分割标志。
body 内容如下:------WebKitFormBoundary18bktajg65CSIx4j
Content-Disposition: form-data; name="files"; filename="test1.txt"
Content-Type: text/plain
this is file1;
------WebKitFormBoundary18bktajg65CSIx4j
Content-Disposition: form-data; name="files"; filename="test2.txt"
Content-Type: text/plain
this is file2;
------WebKitFormBoundary18bktajg65CSIx4j--
三、Content-Type: application/json
现在越来越多的应用使用 application/json, 用来告诉服务端消息主体是序列化的 json 字符串。
body 的内容如下:{"comboId":"","goodsList":[{"goodsId":1372308,"skuId":"1372308-228f0bba1bd1b7241353429cebd7c88b","isHuanGou":0,"selected":1,"count":2,"cartGoodsType":0,"activitySchemeId":111873,"goodsActivityGiftListTemp":[]}]}
在 Content-Type 属性当中还可以指定提交内容的 charset 字符编码。一般不进行设置,它只是告诉 web 服务器 post 提交的数据采用的何种字符编码,一般在开发过程,是由前端工程与后端工程师会提前商量好使用什么字符编码格式来 post 提交的。所以这里设置的 charset 没有多大作用
content-type 示例(响应头):
Content-Type 对照表:http://tool.oschina.net/commons/
HTTP 中 Response 的 Content-Type 标明了 客户端 (往往是指浏览器) 该如何解析这次请求, 一般服务器会根据请求文件的扩展名自动填上匹配的 Content-Type 值,但这个值只是一个指导作用, 意思就是说如果你给一个 <img> 的 src 指向一个 Content-Type= text/css 的错误值, 会发现图片一样可以正确的被显示, 只要图片正文对就行。现在浏览器可以解释的文件类型很多, 除了常用的 HTML , 还有 pdf , word , 多媒体数据 等等. 所以 Content-Type 在 response 中还是非常重要的. 否则浏览器可能会不知道该怎么解释请求的内容。
最后附上 accept 和 content-type 的相关字段:
< 完 >