Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签,用于区分数据类型。最初MIME是用于电子邮件系统的,后来HTTP也采用了这一方案。
媒体类型(也通常称为多用途互联网邮件扩展或 MIME 类型)是一种标准,用来表示文档、文件或一组数据的性质和格式。
在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析并展示html等等。
警告: 浏览器通常使用 MIME 类型而不是文件扩展名来决定如何处理 URL,因此 Web 服务器在 Content-Type 响应标头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会曲解文件内容,网站将无法正常工作,并且下载的文件也可能被错误处理。
HTTP content-type
Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
Content-Type 标头告诉客户端实际返回的内容的内容类型。
语法格式:Content-Type:type/subtype ;parameter
- type:主类型,任意的字符串,如text,如果是*号代表所有
- subtype:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开
- parameter:可选参数,如charset,boundary等
例如:
Content-Type: text/html; charset=utf-8 Content-Type: multipart/form-data; boundary=something
MIME 类型通常仅包含两个部分:类型(type)和子类型(subtype),中间由斜杠 /
分割,中间没有空白字符:
type/subtype
类型代表数据类型所属的大致分类,例如 video
或 text
。
子类型标识了 MIME 类型所代表的指定类型的确切数据类型。以 text
类型为例,它的子类型包括:plain
(纯文本)、html
(HTML 源代码)、calender
(iCalendar/.ics
文件)。
每种类型都有自己的一组可能的子类型。一个 MIME 类型总是包含类型与子类型这两部分,且二者必需成对出现。
有一个可选的参数,能够提供额外的信息:
type/subtype;parameter=value
实例:
常见的媒体格式类型如下:
- text/html : HTML格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/jpeg :jpg图片格式
- image/png:png图片格式
以application开头的媒体格式类型:
- application/xhtml+xml :XHTML格式
- application/xml: XML数据格式
- application/atom+xml :Atom XML聚合格式
- application/json: JSON数据格式
- application/pdf:pdf格式
- application/msword : Word文档格式
- application/octet-stream : 二进制流数据(如常见的文件下载)
- application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
另外一种常见的媒体格式是上传文件之时使用的:
- multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式
常见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种是需要我们清楚他们的区别及牢记在心的。
application/x-www-form-urlencoded
HTTP会将请求参数用key1=val1&key2=val2的方式进行组织,并放到请求实体里面,注意如果是中文或特殊字符如"/"、","、“:" 等会自动进行URL转码。不支持文件,一般用于表单提交。
下面是一个例子:
multipart/form-data
1、请求参数
2、http 请求报文
与application/x-www-form-urlencoded不同,这是一个多部分多媒体类型。首先生成了一个 boundary 用于分割不同的字段,在请求实体里每个参数以------boundary开始,然后是附加信息和参数名,然后是空行,最后是参数内容。多个参数将会有多个boundary块。如果参数是文件会有特别的文件域。最后以------boundary–为结束标识。
multipart/form-data 支持文件上传的格式,一般需要上传文件的表单则用该类型。
application/json
JSON 是一种轻量级的数据格式,以“键-值”对的方式组织的数据。这个使用这个类型,需要参数本身就是json格式的数据,参数会被直接放到请求实体里,不进行任何处理。服务端/客户端会按json格式解析数据(约定好的情况下)。
1、请求参数
2、http 请求报文
application/xml 和 text/xml
与application/json类似,这里用的是xml格式的数据,text/xml的话,将忽略xml数据里的编码格式。