媒体类型
为了区分不同数据类型,HTTP 给每种通过 Web 传输的对象打上了名为 MIME
类型的数据格式标签,当 Web 浏览器从服务器中取出一个对象时,会去查看相关的
常见的 MIME 类型:
- HTML 格式的文本文档由
text/html
类型来标记。 - 普通的 ASCII 文本是有
text/plain
类型来标记。 - JPEG 图片为
image/jpeg
类型 - GIF 图片为
image/gif
类型 - Apple QuickTime 视频为
video/quicktime
类型 - 微软的 PowerPoint 演示文件为
application/vnd.ms-powerpoint
类型。
HTTP 报文
一个 HTTP 事务由一条(客户端发往服务器的)请求命令和一个(从服务器返回给客户端的)响应结果组成。这种通信是通过名为 HTTP 报文(HTTP message)的格式化数据块进行的如图所示:
报文实例
浏览器发送了一条 HTTP 请求报文。这条请求的起始行中有一个 GET 命令,且本地资源为 /tools.html
。 这条请求说明它使用的是 1.0 版的 HTTP 协议。 请求报文没有主体,因为从服务器上 GET 一个简单的文档不需要请求数据。
服务器会回送一条 HTTP 响应报文。这条响应中包含了 HTTP 的版本号(HTTP/1.0)、 一个成功状态码(200)、一个描述性的原因短语(OK), 以及一块响应首部字段, 在所有这些内容之后跟着包含了所请求文档的响应主体。 Content-Length
首部说明了响应主体的长度, Content-Type
首部说明了文档的 MIME 类型。
解析实例
请求
请求行:包含了请求方法、请求资源路径、HTTP 协议版本
GET /tools.html HTTP/1.1
请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息
Host: www.joes-hardware.com // 客户端想访问的服务器主机地址
User-Agent: Mozilla/4.75 (Win98; U)
// 客户端的类型,客户端的软件环境
Accept: text/html, image/gif, image/jpeg // 客户端所能接收的数据类型
Accept-Language: en // 客户端的语言环境
Accept-Encoding: gzip // 客户端支持的数据压缩格式请求体:客户端发给服务器的具体数据,比如文件数据
响应:服务器返回客户端想要的数据
客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端
HTTP 协议规定:1个完整的响应包含以下内容:
状态行:包含了 HTTP 协议版本、状态码、状态英文名称
HTTP/1.1 200 OK
响应头:包含了对服务器的描述、对返回数据的描述
Server: Apache-Coyote/1.1 // 服务器的类型
Content-Type: image/jpeg // 返回数据的类型
Content-Length: 56811 // 返回数据的长度
Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间实体内容:服务器返回给客户端的具体数据,比如文件数据
HTTP 报文包括以下是三个部分
起始行
报文的第一行就是起始行,在请求报文中用来说明要做些什么, 在响应报文中说 明出现了什么情况。
首部字段
起始行后面有零个或多个首部字段。 每个首部字段都包含一个名字和一个值, 为 了便于解析, 两者之间用冒号(:)来分隔。 首部以一个空行结束。 添加一个首 部字段和添加新行一样简单。
主体
空行之后就是可选的报文主体了,其中包含了所有类型的数据。 请求主体中包括 了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。 起 始行和首部都是文本形式且都是结构化的, 而主体则不同, 主体中可以包含任意 的二进制数据(比如图片、视频、音轨、软件程序)。 当然, 主体中也可以包含 文本。
整理自《HTTP 权威指南》