Content-Type
Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析并展示html等等。

常见Content-Type
常见的Content-Type有数百个,下面例举了一些

HTML文档标记:text/html;
普通ASCII文档标记:text/html;
JPEG图片标记:image/jpeg;
GIF图片标记:image/gif;
js文档标记:application/javascript;
xml文件标记:application/xml;

上面的Content-Type,我们只认得就好,但是下面有4种是最重要的:

1. application/json:
  JSON 是一种轻量级的数据格式,以“键-值”对的方式组织的数据。这个使用这个类型,需要参数本身就是json格式的数据,
参数会被直接放到请求实体里,不进行任何处理。服务端/客户端会按json格式解析数据(约定好的情况下)

请求参数如下:
在这里插入图片描述
http 请求报文
在这里插入图片描述

2. multipart/form-data -----使用表单上传文件时,必须让 form 的 enctyped 等于这个值
       与application/x-www-form-urlencoded不同,这是一个多部分多媒体类型。首先生成了一个 boundary 用于分割不同的字段,
   在请求实体里每个参数以------boundary开始,然后是附加信息和参数名,然后是空行,最后是参数内容。
   多个参数将会有多个boundary块。如果参数是文件会有特别的文件域。最后以------boundary–为结束标识。
   multipart/form-data支持文件上传的格式,一般需要上传文件的表单则用该类型

请求参数如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210629142515775.png

http 请求报文:
在这里插入图片描述

3. application/x-www-form-urlencoded
     这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,
     么最终就会以 application/x-www-form-urlencoded 方式提交数据。数据按照 key1=val1&key2=val2 的方式进行编码,
     key 和 val 都进行了 URL 转码,不支持文件,一般用于表单提交

请求参数如下:
在这里插入图片描述
http 请求报文:
在这里插入图片描述

Content-Type的使用
request 的Content-Type
一般我们在开发的过程中需要注意客户端发送请求(Request)时的Content-Type设置,特别是使用ajax的时候,如果设置得不准确,很有可能导致请求失败。比如在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

response的Content-Type设置建议:

一般情况下不需要显示设置;
如果是文件导出,Content-Type 设置为 multipart/form-data,并且添加一个Content-Disposition设置为attachment;fileName=文件.后缀。
注:Content-Disposition是Content-Type的扩展,告诉浏览器弹窗下载框,而不是直接在浏览器里展示文件。因为一般浏览器对于它能够处理的文件类型,如txt,pdf 等,它都是直接打开展示,而不是弹窗下载框。
下面的一个设置response的Content-Type的例子:

未准确设置response的Content-type的情况,客户端将json数据当成普通文本
content-type →text/html;charset=UTF-8
在这里插入图片描述
准确设置response的Content-type的情况,客户端将json数据自动解析
content-type →application/json;charset=UTF-8

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐