Content-Type的使用
1、Content-Type 的简介
Content-Type即互联网媒体类型,也叫MIME类型。在互联网HTTP传输数据对象中我们会为他们打上这个Content-Type的数据格式标签,用于区分数据类型。最初Content-Type只是用于电子邮件系统,随着慢慢的使用推广,我们在HTTP中也采用了这一套规范方案。
现在在HTTP协议消息头中,我们使用Content-Type来表示请求和响应中的媒体类型信息,以此用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析并展示html等等。
2、Content-Type的常见格式类型
Content-Type格式规范是这样的(Content-Type:type/subtype ;parameter) ,其中参数如下:
type:主类型,任意的字符串,如text,如果是*号代表所有;
subtype:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;
parameter:可选参数,如charset,boundary等。
常见的栗子有:
HTML文档标记:text/html;
普通ASCII文档标记:text/html;
JPEG图片标记:image/jpeg;
GIF图片标记:image/gif;
js文档标记:application/javascript;
xml文件标记:application/xml;
json字符串并且使用utf-8编码:application/json;charset:utf-8;
3.常用类型简介
3.1 application/x-www-form-urlencoded
HTTP会将请求参数用key1=val1&key2=val2的方式进行拼接然后放到请求实体里面,需要注意的是,如果是中文或特殊字符如"/"、","、“:" 等会自动进行URL转码,并且这种类型不支持文件,一般是用于表单提交的。
3.2 multipart/form-data
它是一个多部分多媒体类型,首先生成了一个 boundary 用于分割不同的字段,在请求实体里每个参数以boundary开始,然后是附加信息和参数名,然后是空行,最后是参数内容。多个参数将会有多个boundary块。如果参数是文件会有特别的文件域。最后以boundary为结束标识。multipart/form-data是支持文件上传的格式的,一般用于上传文件的表单。
3.3 application/json
顾名思义是以JSON这种轻量级的数据格式,以“键-值”对的方式拼接数据进行传输的。使用时需要参数本身就是json格式的数据,参数会被直接放到请求实体里,不进行任何处理。服务端/客户端会按json格式解析数据,一般我们在服务端创建实体类进行接收解析。
3.4 application/xml 和 text/xml
与application/json类似,是传输xml格式的数据,如果使用text/xml类型会忽略xml数据里的编码格式。
4、Content-Type的使用
4.1 request中的Content-Type
客户端发出的Request请求中的的Content-Type设置必须要准确,如果不准确的话可能会导致请求失败。在spring中,如果接口使用了@RequestBody,spring的自动解析功能会将请求实体的内容自动转换为对应的Bean,但前提是请求的Content-Type必须设置为application/json,否正就会返回415错误(415 错误是 Unsupported media type,即不支持的媒体类型)。
在使用的时候可以这样来配置:如果是一个restful接口(json格式),一般将Content-Type设置为application/json; charset=UTF-8;如果是文件上传,一般Content-Type设置为multipart/form-data如果普通表单提交,一般Content-Type设置为application/x-www-form-urlencoded
4.2 response的Content-Type
服务端Response响应的Content-Type也必须准确,虽然前端解析响应的数据不会根据Content-Type,并且服务端一般能自动设置准确的Content-Type,但是如果乱设置某些情况下可能会有问题,比如导出文件,打开图片等。如果在spring项目里使用@ResponseBody,spring会将响应的Content-Type设置为application/json;charset=UTF-8;,可能会导致文件无法导出,需要注意下。
在使用的时候可以这样来配置:如果是文件导出,Content-Type 设置为 multipart/form-data,并且添加一个Content-Disposition设置为attachment;fileName=文件.后缀。其中Content-Disposition是Content-Type的扩展,告诉浏览器弹窗下载框,而不是直接在浏览器里展示文件。因为一般浏览器对于它能够处理的文件类型,如txt,pdf 等,它都是直接打开展示,而不是弹窗下载框。
以上就是Content-Type的使用和小知识点的总结。
- 点赞
- 收藏
- 关注作者
评论(0)