Content-Type 首部字段说明了实体主体的 MIME 类型。MIME 类型是标准化的名字,用以说明作为货物运载实体的基本媒体类型。客户端应用程序使用 MIME 类型来解析和处理其内容。
MIME 类型由一个主媒体类型后面跟一条斜线以及一个子类型组成,子类型用于进一步描述媒体类型。
1. 文本的字符编码
Content-Type 首部还支持可选的参数来进一步说明内容的类型。charset(字符集)参数就是个例子,它说明把实体中的比特转换为文本文件中的字符的方法。
2. 多部分媒体类型
MIME 中的 multipart(多部分)电子邮件报文中包含多个报文,它们合在一起作为单一的复杂报文发送。每一部分都是独立的,有各自的描述其内容的集;不同的部分之间用分界字符串连接在一起。
3. 多部分表格提交
当提交填写的 HTTP 表格时,变长的文本字段和上传的对象都作为多部分主体里面独立的部分发送,这样表格中就可以填写各种不同类型和长度的值。
HTTP 使用 Content-Type:multipart/form-data 或 Content-Type:multipart/mixed 这样的首部以及多部分主体来发送这种请求,举例如下:
Content-Type: multipart/form-data; boundary:[abcdefghijklmnopqrstnvwxyz]
其中的 boundary 参数说明了分隔主体中不同部分所用的字符串。
下面的例子展示了 multipart/form-data 编码。假设我们有这样的表格:
<form action="http://server.com/cgi/handle" enctype="multipart/form-data" method="post"> What is your name?<input type="text" name="submit-name"><br> What files are you sending?<input type="file" name="files"><br> <input type="submit" value="Send"><input type="reset"> </form>
用户 Agent 代理可能会发回下面这样的数据:
Content-Type: multipart/form-data; boundary=AaB03x --AaB03x Content-Disposition: form-data; name="submit-name" Sally --AaB03x Content-Disposition: form-data; name="files"; filename="essayfile.txt" Content-Type: text/plain ...contents of essayfile.txt... --AaB03x--
如果用户还选了另一个(图像)文件 imagefile.gif,用户 Agent 代理可能像下面这样构造这个部分:
Content-Type: multipart/form-data; boundary=AaB03x --AaB03x Content-Disposition: form-data; name="submit-name" Sally --AaB03x Content-Disposition: form-data; name="files"; Content-Type: multipart/mixed; boundary=BbC04y --BbC04y Content-Disposition: file; filename="essayfile.txt" Content-Type: text/plain ...contents of essayfile.txt... --BbC04y Content-Disposition: file; filename="imagefile.gif" Content-Type: image/gif ...contents of imagefile.gif... --BbC04y --AaB03x--
4. 多部分范围响应
HTTP 对范围请求的响应也可以是多部分的。这样的响应中有 Content-Type:multipart/byteranges 首部和带有不同范围的多部分主体。