浏览器要显示内容,首先需要判断响应消息中的数据属于哪种类型。Web 可以处理的数据包括文字、图像、声音、视频等多种类型,每种数据的显示方法都不同,因此必须先要知道返回了什么类型的数据,否则无法正确显示。
这时,我们需要一些信息才能判断数据类型,原则上可以根据响应消息开头的 Content-Type 头部字段的值来进行判断。这个值一般是下面这样的字符串。
Content-Type: text/html
其中“/”左边的部分称为“主类型”,表示数据的大分类;右边的“子类型”表示具体的数据类型。在上面的例子中,主类型是 text,子类型是 html。主类型和子类型的含义都是事先确定好的,表中列出了其中主要的一些类型。上面例子中的数据类型表示遵循 HTML 规格的 HTML 文档。
常见的媒体格式类型如下:
主类型 | 含义 | 子类型示例 |
---|---|---|
text/html : HTML文档格式
|
||
text | 表示文本数据 |
text/plain :纯文本格式
|
text/xml : XML格式
|
||
image/gif :gif图片格式
|
||
image | 表示图像数据 |
image/jpeg :jpg图片格式
|
image/png :png图片格式
|
||
audio | 表示音频数据 | audio/mpeg:MP2、MP3格式的音频 |
video | 表示视频数据 | video/mpeg:MPEG格式的视频 |
video/quicktimeQuickTime格式的视频 | ||
model | 表示对物体等的形状和动作进行建模的数据 | model/vrml:VRML格式的建模数据 |
application/xhtml+xml :XHTML格式
|
||
application/xml : XML数据格式
|
||
application/atom+xml :Atom XML聚合格式
|
||
application/json : JSON数据格式
|
||
application | 除上述以外的数据,Excel、Word等应用程序的数据都属于这一类型 |
application/pdf :pdf格式的文档数据
|
application/msword : MS-Word格式的文档数据
|
||
application/octet-stream : 二进制流数据(如常见的文件下载)
|
||
application/x-www-form-urlencoded : <form encType=””> 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
|
||
message | 直接存放邮件等消息是使用的类型,表示直接存放某种格式的消息 | message/rfc822:一般的邮件数据,包含From:、Date:等头部数据 |
multipart | 消息体中包含多个部分的数据 |
multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式
|
此外,当数据类型为文本时,还需要判断编码方式,这时需要用 charset 附加表示文本编码方式的信息,内容如下。
Content-Type: text/html; charset=utf-8
除了通过 Content-Type 判断数据类型,还需要检查 Content-Encoding 头部字段。如果消息中存放的内容是通过压缩或编码技术对原始数据进行转换得到的,那么 Content-Encoding 的值就表示具体的转换方式,通过这个字段的值,我们可以知道如何将消息中经过转换的数据还原成原始数据。
来源:https://leetcode-cn.com/leetbook/read/how-networks-work/9zy9ct/