|
HTTP协议(RFC2616)采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户 信息和内容的类似于MIME的消息结构
比如访问百度主页时,请求头所包含的内容为:(Request-Line) GET / HTTP/1.1
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip,deflate
Accept-Language en-us,en;q=0.5
Connection keep-alive
Host www.baidu.com
Keep-Alive 115
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18
然后服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以 及可能的实体内容。接上面的访问请求,百度服务器返回的头部信息为:(Status-Line) HTTP/1.1 200 OK
Cache-Control private
Connection Keep-Alive
Content-Encoding gzip
Content-Length 3443
Content-Type text/html;charset=gb2312
Date Fri, 01 Jul 2011 12:12:06 GMT
Expires Fri, 01 Jul 2011 12:12:06 GMT
P3P CP=" OTI DSP COR IVA OUR IND COM "
Server BWS/1.0
Set-Cookie BAIDUID=273B7B6B481BD1527B06A57AFC5DCB39:FG=1; expires=Fri, 01-Jul-41 12:12:06 GMT; path=/; domain=.baidu.com 从收到服务器端发送过来的头部我们已经看到了有 Content-Type 字样,后面 text/html;charset=gb2312 标明了它的内容属性。
Content-Type 就是用来表明它后面的文档属于什么 MIME 类型。
Content-Type 的常见类型就是上面的 text/html ---- 它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。
Content-Type 中的 Type 有下面的形式:Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
Application:用于传输应用程序数据或者二进制数据;
Message:用于包装一个E-mail消息;
Image:用于传输静态图片数据;
Audio:用于传输音频或者音声数据;
Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。
还有一个 subtype 的概念。它用于指定 Tpye 的详细形式。
content-type/subtype 配对的集合和与此相关的参数,将随着时间而增长。为了确保这些值在一个有序而且公开的状态下开发,MIME 使用 Internet Assigned Numbers Authority (IANA)作为中心的注册机制来管理这些值。
在 Content-Type text/html;charset=gb2312 这个格式中,后面的 text/html;charset=gb2312 是 Content-Type 的参数(parameter) 。
parameter 可以用来指定附加的信息,更多情况下是用于指定 text/plain 和 text/htm 等的文字编码方式的 charset (如上面的 gb2312)参数。
MIME 根据 type 制定了默认的 subtype,当客户端不能确定消息的 subtype 的情况下,消息被看作默认的 subtype 进行处理。Text 默认是 text/plain,Application 默认是 application/octet-stream 而 Multipart 默认情况下被看作 multipart/mixed。 |
|