目录
报文的语法
每条报文都包含一条来自客户端的请求或者服务端的响应。由以下三部分组成:文章源自编程技术分享-https://mervyn.life/72155f3e.html
- 起始行
- 包含属性的首部块
- 以及可选的、包含数据的主体部分
所有的HTTP报文都可以分为两类: 请求报文
和 响应报文
文章源自编程技术分享-https://mervyn.life/72155f3e.html
请求报文的格式如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html
<method> <request url> <version>
<headers>
\r\n
<entity-body>
响应报文的格式如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html
<version> <status-code> <reason-phrase>
<headers>
\r\n
<entity-body>
- 方法(method)
客户端希望服务器对资源执行的动作。GET 、 POST 之类的。文章源自编程技术分享-https://mervyn.life/72155f3e.html
- 请求URL (request url)
- 版本(version)
报文所使用的HTTP版本,格式如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html
HTTP/<major>.<minor>
其中主要版本号和次要版本号都是整数。文章源自编程技术分享-https://mervyn.life/72155f3e.html
-
状态码(status-code)文章源自编程技术分享-https://mervyn.life/72155f3e.html
-
原因短语(reason-phrase)文章源自编程技术分享-https://mervyn.life/72155f3e.html
-
首部(header)文章源自编程技术分享-https://mervyn.life/72155f3e.html
-
实体的主体部分(entity-body)文章源自编程技术分享-https://mervyn.life/72155f3e.html
下图展示了一个请求和响应的示例:文章源自编程技术分享-https://mervyn.life/72155f3e.html
文章源自编程技术分享-https://mervyn.life/72155f3e.html
起始行
所有的报文都需要以一个起始行作为开始。文章源自编程技术分享-https://mervyn.life/72155f3e.html
请求行
请求报文的起始行,或称为请求行,包含了一个方法和一个请求URL。请求行还包含HTTP的版本,用来告知服务器客户端使用的是哪个版本的HTTP。文章源自编程技术分享-https://mervyn.life/72155f3e.html
所有的字段由空格符分隔。如:文章源自编程技术分享-https://mervyn.life/72155f3e.html
GET /test HTTP/1.1
响应行
响应报文的起始行,或称响应行,包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。文章源自编程技术分享-https://mervyn.life/72155f3e.html
所有的字段由空格符分隔。如:文章源自编程技术分享-https://mervyn.life/72155f3e.html
HTTP/1.0 200 OK
方法
请求的起始行以方法作为开始,用来告知服务器要做些什么。常见HTTP方法如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html
HTTP方法 | 描述 | 是否包含主体 |
---|---|---|
GET | 从服务器获取一份文档 | 否 |
HEAD | 只从服务器获取文档首部 | 否 |
POST | 向服务器发送要处理的数据 | 是 |
PUT | 将请求的主体部分存储在服务器上 | 是 |
TRACE | 对可能经过代理服务器传送到服务器上去的报文进行追踪 | 否 |
OPTIONS | 决定可以在服务器上执行哪些方法 | 否 |
DELETE | 从服务器删除一份文档 | 否 |
状态码
用来告诉客户端,发生了什么。状态码位于响应的起始行中。如:文章源自编程技术分享-https://mervyn.life/72155f3e.html
HTTP/1.0 200 OK
其中,状态码就是200文章源自编程技术分享-https://mervyn.life/72155f3e.html
状态分类如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html
整体范围 | 已定义范围 | 分类 |
---|---|---|
100~199 | 100~101 | 信息提示 |
200~299 | 200~206 | 成功 |
300~399 | 300~305 | 重定向 |
400~499 | 400~415 | 客户端错误 |
500~599 | 500~505 | 服务器错误 |
首部
首部分类
首部有如下几种分类:文章源自编程技术分享-https://mervyn.life/72155f3e.html
- 通用首部
既可以在请求报文,也可以在响应报文文章源自编程技术分享-https://mervyn.life/72155f3e.html
- 请求首部
提供更多的有关请求的信息文章源自编程技术分享-https://mervyn.life/72155f3e.html
- 响应首部
提供更多的响应信息文章源自编程技术分享-https://mervyn.life/72155f3e.html
- 实体首部
描述主体的长度和内容,或者资源自身文章源自编程技术分享-https://mervyn.life/72155f3e.html
- 扩展首部
每个HTTP首部都有一个简单的语法:名字后边跟着冒号(:
),然后跟上可选的空格,在跟上字段值,最后是一个CRLF
。文章源自编程技术分享-https://mervyn.life/72155f3e.html
例:文章源自编程技术分享-https://mervyn.life/72155f3e.html
Content-length: 1540
Content-type: image/gif
首部延续行
有些长的首部可以分为多行以提高可读性,多出来的每行都要至少有个 空格
或者 tab
文章源自编程技术分享-https://mervyn.life/72155f3e.html
实体的主体部分
HTTP要传输的内容文章源自编程技术分享-https://mervyn.life/72155f3e.html
评论