HTTP报文
一、 报文流
HTTP报文是在HTTP应用程序之间发送的数据块,这些数据块以文本形式在客户端、服务器和代理之间流动。报文会像河水一样向下游流动,所有报文的发送者都在接受者的上游。
二、 报文的组成部分
报文是简单的格式化数据块,或包含客户端的请求或服务器的响应。
1. 三个组成部分:起始行、首部、主体
HTTP/1.0 200 OK 起始行 [对报文进行描述]
Content-type: text/plain 首部 [报文的属性]
Content-length 首部 [报文的属性]
[空行] [在主体与起始行、首部之间空一行]
This is a msg! 主体 [可选的报文数据主体]
起始行和首部是以行分割的ASCII文本,每行都以两个字符作为结束(即:回车符+换行符)
报文的主体部分是一个可选的数据块,可以包含文本、二进制数据也可以为空
如图:
2. 报文的语法格式:
请求报文:
<请求方法> <请求的URL> <HTTP版本>
<请求首部>
<请求的主体部分 >
响应报文:
<HTTP版本> <状态码> <原因短语 >
<响应首部>
<响应的主体部分>
简要描述:
请求方法: 客户端需要服务器执行的操作,如:GET、HEAD、POST
请求URL: 请求资源的URL路径,完整的URL
HTTP版本: 报文所使用的HTTP版本,格式为: HTTP/主版本号.次要版本号,如HTTP/1.1
原因短语: 状态码的可读版本,如 HTTP/1.0 200 OK,其中“OK”就是原因短语
首部部分: 一个报文可以有零个或多个首部,每个首部都包含一个名字,后面跟个冒号,然后是一个可选的空格在接着一个值,最后是一个回车换行。如:Server: BWS/1.0
主体部分: 任意数据组成的数据块,可选。偶尔报文只是以一个回车换行[CRLF]结束
三、 报文的起始行
所有的HTTP报文都以一个起始行开始,请求报文的起始行说明要做些什么,响应报文的起始行说明发生了什么。
- 请求报文请求服务器对资源进行一些操作,其起始行称为请求行,其包含一个方法、一个URL和一个HTTP版本。
比如:GET /123.txt HTTP/1.1 代表请求方法为GET,请求URL为/123.txt ,版本协议为 HTTP/1.1
- 响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。其起始行成文响应行,包含了响应报文使用的HTTP版本、数字状态码和一个文本形式的原因短语。
比如:HTTP/1.1 200 OK 代表响应报文使用HTTP/1.1协议,状态码为200表示成功,原因短语为OK(表示之前的请求是成功的)
1. 方法
方法 | 描述 | 包含报文主体 |
GET | 从服务器获取一份文档 | 否 |
HEAD | 只从服务器获取文档的首部 | 否 |
POST | 向服务器发送需要处理的数据 | 是 |
PUT | 将请求的主体部分存储在服务器上 | 是 |
TRACE | 对经过的代理服务器传送到服务器上去的报文进行追踪 | 否 |
OPTIONS | 获取在服务器上可以执行哪些方法 | 否 |
DELETE | 从服务器上删除一份文档 | 否 |
PS:并不是所有的服务器都实现上表中的7种方法,个别WEB服务器可能还会实现自己的请求方法,称为扩展方法。
2. 状态码
整体范围 | 已定义的范围 | 分类 |
100 ~ 199 | 100 ~ 101 | 信息提示 |
200 ~ 299 | 200 ~ 206 | 成功 |
300 ~ 399 | 300 ~ 305 | 重定向 |
400 ~ 499 | 400 ~ 415 | 客户端错误 |
500 ~ 599 | 500 ~ 505 | 服务器错误 |
四、 报文的首部
HTTP首部字段向请求和响应报文中添加一些附加信息。本质上是 名/值 对的列表。分为通用首部、请求首部、响应首部、实体首部、扩展首部。
常见的首部实例:
首部实例 | 描述 |
Date: Wed, 27 Mar 2013 14:36:55 GMT | 服务器产生响应的日期 |
Content-Length: 48 | 实体的主体部分包含数据的长度 |
Content-Type: image/jpeg | 实体的主体部分是一个 JPEG图片 |
Accept: image/gif, image/jpeg, text/html | 客户端可接收GIF、JPEG图片及HTML |
五、 报文的主体
HTTP报文的第三部分是可选额实体部分,实体的主体是HTTP报文的负荷,也就是HTTP要传输的内容。可以承载的类型数据:图片、视频、HTML稳定、软件应用程序电子邮件等…