HTTP 报文结构
HTTP 报文有 请求报文 和 响应报文 两种。
请求报文:从客户向服务器发送请求报文。
响应报文:从服务端到客户的回答。
由于 HTTP 是面向文本的,因此在报文中的每一个字段都是一些 ASCII 码串,因此各个字段的长度是不确定的。
这也造成了 HTTP 报文结构的统一性,不然无法解析出数据。
HTTP的这两种报文都由三部分组成:开始行、首部行、实体主体。
开始行
区分请求报文与响应报文
请求报文的开始行
也叫请求行,由 方法、[空格]、URL、[空格]、HTTP版本 组成。
方法: 向请求资源指定的资源发送请求报文的方法,其作用是可以指定请求的资源按期望产生某种行为。
URL : 链接
HTTP版本:目前有 HTTP/1.0、HTTP/1.1、HTTP/2.0 版本,其中 HTTP1.0 版本使用较广泛。
以下为 HTTP/1.0 和 HTTP/1.1 支持的方法:
方法 | 说明 | 支持的HTTP协议版本 | 请求行例子 |
---|---|---|---|
GET | 获取资源 | 1.0、1.1 | GET /csrfToken HTTP/1.1 |
POST | 传输实体主体 | 1.0、1.1 | |
PUT | 传输文件 | 1.0、1.1 | |
HEAD | 获得报文首部 | 1.0、1.1 | |
DELETE | 删除资源 | 1.0、1.1 | |
OPTIONS | 询问支持的方法 | 1.1 | |
TRACE | 追踪路径 | 1.1 | |
CONNECT | 由于代理服务器 | 1.1 | |
LINK | 建立和资源之间的联系 | 1.0 | |
UNLINK | 断开连接关系 | 1.0 |
响应报文的开始行
也叫响应行,由 HTTP 版本、[空格]、状态码组成。
状态码(Status-Code)都是三位数字的,分为 5 大类共 33 种。
如:
状态码 | 说明 | 请求行例子 |
---|---|---|
1xx | 表示通知信息的,如请求收到了或正在进行处理 | |
2xx | 表示成功 | HTTP/1.1 200 OK |
3xx | 表示重定向 | |
4xx | 表示客户端的差错,如请求链接为不存在 | HTTP/1.1 404 Not Found |
5xx | 表示服务器的差错 |
首部行
1.是用来说明浏览器、服务器或报文主体的一些信息。
2.可以有好几行,也可以不使用
3.每个首部行都是由 首部字段名、[空格] 和 值 组成
4.每个首部行在结束地方都有 CRLF
(『回车』和『换行』符)
HTTP 首部字段分为 4 种: 通用首部字段、请求首部字段、响应首部字段、实体首部字段。
一张图展示所有字段:
HTTP 报文首部字段
脑图链接:
https://www.processon.com/view/link/58025201e4b0d6b27dd4c8af
实体主体
在请求报文中,一般是 post/put 提交的表单信息。与首部行之间有 CRLF
即空行。
实例
说了这么多,再上点例子来辅助理解。
打开 chrome 控制台,点击 NetWork , 然后输入一个网址,回车,一般我们都会有这样的场面
页面中有很多的请求,点击一个请求进去呢,比如第一个
wan.meizu.com你会发现请求报文和响应报文都在图中,不过这些都是 chrome 浏览器为了我们方便查看,帮我们美化过了的。
不知道你们是否有注意到 view source 字眼,点击看看
你会发现, 响应报文 和 请求报文就是上面讲的 HTTP 报文结构-- 开始行、首部行。
而实体主体可以在 Request Headers 下面的 Request Payload 看到,下图是我编写这边文章时的自动保存的请求。大家可以自己尝试下。
Request Payload下图是使用 wireshark 抓到这条请求的 HTTP 报文,蓝色框框部分就是实体主体。
完整报文注意:实体主体与首部行隔一空行
总结
HTTP 报文有 请求报文 和 响应报文 两种。
HTTP的这两种报文都由三部分组成:开始行、首部行、实体主体。
开始行可用于区分两种报文。
首部行都是由 首部字段名 和 值 组成,每个首部行在结束地方都有 CRLF
首部行和实体主体间有 CRLF