Content-Type的使用

举报
多米诺的古牌 发表于 2022/08/28 13:00:21 2022/08/28
【摘要】 Content-Type即互联网媒体类型,也叫MIME类型。在互联网HTTP传输数据对象中我们会为他们打上这个Content-Type的数据格式标签,用于区分数据类型。最初Content-Type只是用于电子邮件系统,随着慢慢的使用推广,我们在HTTP中也采用了这一套规范方案。

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的使用和小知识点的总结。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。