浅谈http协议(四):Content-Type字段及媒体格式

当浏览器发起http请求时,有一个关于媒体格式的请求头字段,浏览器会根据请求链接的内容帮我们自动加上,那就是Accept字段,它的作用告诉WEB服务器自己接受的MIME类型,属于请求头,而服务器接收到该信息后,使用Content-Type 应答头通知客户端它选择的MIME类型,属于实体头,服务端不返回Content-Type字段时浏览器会按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”,参数都是通过键值对方式传递。该方式对于文件上传有很多不便
《浅谈http协议(四):Content-Type字段及媒体格式》

body的内容如下:
Form Data:number=1&goodsId=1405140&skuId=1405140-68a3e5516d7a7dc21fbe0e7ee13bfc1c&innerSource=DETAIL

二、Content-Type:multipart/form-data
在1995年的时候,content-type扩充了multipart/form-data用以支持向服务器发送二进制数据,此种方式多用于二进制文件上传,表单数据都保存在http的主体部分(比如post的body),很多情况下都会有批量上传,所以各个表单项之间用boundary的值作为分割标志。

《浅谈http协议(四):Content-Type字段及媒体格式》

三、Content-Type: application/json
现在越来越多的应用使用application/json,用来告诉服务端消息主体是序列化的json字符串。

《浅谈http协议(四):Content-Type字段及媒体格式》

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的相关字段:
《浅谈http协议(四):Content-Type字段及媒体格式》

《浅谈http协议(四):Content-Type字段及媒体格式》

<完>

    原文作者:广州鹏少
    原文地址: https://segmentfault.com/a/1190000019802044
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞