1,content-type介绍
在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据
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;
2,常用类型
常见Content-Type
Content-Type有数百个,下面例举了一些
- MulitPart/form-data 文件上传格式
- application/json json格式
- application/x-www-form-data-urlencoded 标准key-value格式
- application/pdf pdf格式
- application/msword word格式
- application/octet-stream : 二进制流数据(如常见的文件下载)
上面的Content-Type,我们只认得就好,但是下面有4种是需要我们清楚他们的区别及牢记在心的。
application/x-www-form-urlencoded
HTTP会将请求参数用key1=val1&key2=val2的方式进行组织,并放到请求实体里面,注意如果是中文或特殊字符如"/"、","、“:" 等会自动进行URL转码。不支持文件,一般用于表单提交。
multipart/form-data
-
多部分多媒体类型。
首先生成了一个 boundary 用于分割不同的字段,在请求实体里每个参数以------boundary开始,然后是附加信息和参数名,然后是空行,最后是参数内容。多个参数将会有多个boundary块。如果参数是文件会有特别的文件域。最后以------boundary–为结束标识。
-
multipart/form-data支持文件上传的格式,一般需要上传文件的表单则用该类型。
每个子部分都需要提供一个Content-Disposition标头
Content-Disposition: form-data; name="fieldName"
Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"
application/octet-stream
- 这是二进制文件的默认值 ,浏览器将这些文件视为
Content-Disposition标头被设置为attachment一样,并弹出“另存为”对话框。 Content-Disposition响应标头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地
Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"
application/json
JSON 是一种轻量级的数据格式,以“键-值”对的方式组织的数据。这个使用这个类型,需要参数本身就是json格式的数据,参数会被直接放到请求实体里,不进行任何处理。服务端/客户端会按json格式解析数据(约定好的情况下)。
application/xml 和 text/xml
与application/json类似,这里用的是xml格式的数据,text/xml的话,将忽略xml数据里的编码格式,参考。
2、options预检
非简单 且 跨域 触发
非简单请求
-
请求方法不是get head post
-
post 的content-type不是application/x-www-form-urlencode,multipart/form-data,text/plain [也就是把content-type设置成"application/json"]
-
请求设置了自定义的header字段: 比如业务需求,传一个字段,方面后端获取,不需要每个接口都传
推荐 mdn文档