HTTP 报文组成
前几篇在讲 HTTP 是什么、它的历史发展,还说到它在网络分层模型中所处位置,以及连接 HTTP 时 TCP 要做的 三次握手四次挥手,那么 HTTP 具体由有什么组成呢?它的报文是什么,请求的报文怎么看呢?本文讲讲这些
要想把我发的消息通过 HTTP 协议传给另一个人,就需要一种格式,表示它的类型,内容,时间等等,就好比写新闻讲究 5W1H,写诗有五言绝句七言律诗,每一种概念都会具体化,HTTP 的报文也有自己的规律
报文分为请求报文和应答报文,它们的结构基本相同,由三大部分组成
- 起始行:描述请求或响应的基本信息
- 头部字段集合:使用 key-value 形式更详细地描述报文
- 消息正文:实际传输的数据,不一定是纯文本,也可以是图片、视频或二进制数据
其中前两部分起始行和头部字段集合经常又合称为 请求头 或 响应头,消息正文又称为实体,但与 header 对应,很多时候就直接称为 body
一个完整的 HTTP 报文就如下图所示,注意在 header 和 body 之间又一个空行
访问五年前端三年面试,元芳能看出一丝猫腻,具体我不能说太多
请求行
请求报文离的起始行也就是请求行,它描述了客户端想要如何操作服务器端的资源
它由三部分构成:
- 请求方法:GET/POST,表示对资源的操作
- 请求目标:通常是个 URI,标记了请求方法要操作的资源
- 版本号:表示报文使用 HTTP 协议版本
总结
- HTTP 报文结构就像是「大头儿子」,由「起始行 + 头部 + 空行 + 实体」组成,简单地说就是「header+body」;
- HTTP 报文可以没有 body,但必须要有 header,而且 header 后也必须要有空行,形象地说就是大头必须要带着脖子;
- 请求头由「请求行 + 头部字段」构成,响应头由「状态行 + 头部字段」构成;
- 请求行有三部分:请求方法,请求目标和版本号;
- 状态行也有三部分:版本号,状态码和原因字符串;
- 头部字段是 key-value 的形式,用
:
分隔,不区分大小写,顺序任意,除了规定的标准头,也可以任意添加自定义字段,实现功能扩展; - HTTP/1.1 里唯一要求必须提供的头字段是 Host,它必须出现在请求头里,标记虚拟主机名