Content-Type
Content-Type
Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签,用于区分数据类型。
在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析并展示html等等。
Content-Type的格式:
Content-Type:type/subtype ;parameter
type:主类型,任意的字符串,如text,如果是*号代表所有;
subtype:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;
parameter:可选参数,如charset,boundary等。
例如:
Content-Type: text/html;
Content-Type: application/json;charset:utf-8;
MIME 类型 | 描述 |
---|---|
text/plain | 纯文本文档 |
text/html | HTML 文档 |
text/javascript | JavaScript 文件 |
text/css | CSS 文件 |
application/json | JSON 文件 |
application/pdf | PDF 文件 |
application/xml | XML 文件 |
image/jpeg | JPEG 图像 |
image/png | PNG 图像 |
image/gif | GIF 图像 |
image/svg+xml | SVG 图像 |
audio/mpeg | MP3 文件 |
video/mpeg | MP4 文件 |
application/json
现在越来越多的应用使用application/json,用来告诉服务端消息主体是序列化的json字符串。由于json规范的流行,各大浏览器都开始原生支持JSON.stringfy。
而且spring对这个content-Type上传的数据有很好的支持,可以直接通过@RequestBody进行接收。也是当前完美适配当前流行的RestApi。
JSON 是一种轻量级的数据格式,以“键-值”对的方式组织的数据。使用这个类型,需要参数本身就是json格式的数据,参数会被直接放到请求实体里,不进行任何处理。服务端/客户端会按json格式解析数据(约定好的情况下)。
请求参数

http 请求报文

application/x-www-form-urlencoded
在最开始的请求方式中,请求参数都是放在url中,表单提交的时候,都是以key=&value=的方式写在url后面。这也是浏览器表单提交的默认方式。
不支持文件,一般用于表单提交。
- 请求参数
- http 请求报文
multipart/form-data
简介
此种方式多用于文件上传,表单数据都保存在http的正文部分,各个表单项之间用boundary分开。
与application/x-www-form-urlencoded不同,这是一个多部分多媒体类型。首先生成了一个 boundary 用于分割不同的字段,在请求实体里每个参数以——boundary开始,然后是附加信息和参数名,然后是空行,最后是参数内容。多个参数将会有多个boundary块。如果参数是文件会有特别的文件域。最后以——boundary–为结束标识。multipart/form-data支持文件上传的格式,一般需要上传文件的表单则用该类型。
下面是一个例子:
- 请求参数
- http 请求报文
Content-Disposition
是必选项, name
属性代表着表单元素的 key
,filename
则是上传文件的名称
为什么需要 FormData
application/json
作为请求头 Content-Type
字段值时,表示告知服务端参数是序列化后的 JSON
字符串,所以一般在传参时都会用 JSON.stringify
序列化一下,但是 JSON.stringify
在转换某一些数据结构时会出问题,比如 会丢失 function 类型的参数、循环引用时会报错、**Blob
/File
对象会被转化成 {}
** 等等。
如果要是图片那可以转换成 base64
格式进行上传解决,这种方式虽然可行,但是转换成 base64
格式需要很多字符,占用很多资源,而且很长,不便于阅读,另外就是服务端接收到这个参数还得解析,很麻烦,此时,FormData
就可用上了。
使用 FormData
window 上直接挂载了 FormData 对象

我们一般都使用 append 方法
append 和 set 的区别:
append
的 key
存在,就会附加到已有值集合的后面,而 set
会使用新值覆盖已有的值