http常用content-type

425 阅读3分钟

1,content-type介绍

image.png

在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据

Content-Type的格式:

Content-Type:type/subtype ;parameter

  1. type:主类型,任意的字符串,如text,如果是*号代表所有;
  2. subtype:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;
  3. parameter:可选参数,如charset,boundary等。

例如:

  1. Content-Type: text/html;
  2. 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转码。不支持文件,一般用于表单提交。 image.png

multipart/form-data

  • 多部分多媒体类型。
    首先生成了一个 boundary 用于分割不同的字段,在请求实体里每个参数以------boundary开始,然后是附加信息和参数名,然后是空行,最后是参数内容。多个参数将会有多个boundary块。如果参数是文件会有特别的文件域。最后以------boundary–为结束标识。
    image.png

  • 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格式解析数据(约定好的情况下)。

image.png

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文档