Skip to content

HTTP 报文组成

前几篇在讲 HTTP 是什么、它的历史发展,还说到它在网络分层模型中所处位置,以及连接 HTTP 时 TCP 要做的 三次握手四次挥手,那么 HTTP 具体由有什么组成呢?它的报文是什么,请求的报文怎么看呢?本文讲讲这些

要想把我发的消息通过 HTTP 协议传给另一个人,就需要一种格式,表示它的类型,内容,时间等等,就好比写新闻讲究 5W1H,写诗有五言绝句七言律诗,每一种概念都会具体化,HTTP 的报文也有自己的规律

报文分为请求报文和应答报文,它们的结构基本相同,由三大部分组成

  • 起始行:描述请求或响应的基本信息
  • 头部字段集合:使用 key-value 形式更详细地描述报文
  • 消息正文:实际传输的数据,不一定是纯文本,也可以是图片、视频或二进制数据

其中前两部分起始行和头部字段集合经常又合称为 请求头 或 响应头,消息正文又称为实体,但与 header 对应,很多时候就直接称为 body

一个完整的 HTTP 报文就如下图所示,注意在 header 和 body 之间又一个空行

报文信息

访问五年前端三年面试,元芳能看出一丝猫腻,具体我不能说太多

image-20220408153029388

请求行

请求报文离的起始行也就是请求行,它描述了客户端想要如何操作服务器端的资源

它由三部分构成:

  • 请求方法:GET/POST,表示对资源的操作
  • 请求目标:通常是个 URI,标记了请求方法要操作的资源
  • 版本号:表示报文使用 HTTP 协议版本

总结

  1. HTTP 报文结构就像是「大头儿子」,由「起始行 + 头部 + 空行 + 实体」组成,简单地说就是「header+body」;
  2. HTTP 报文可以没有 body,但必须要有 header,而且 header 后也必须要有空行,形象地说就是大头必须要带着脖子;
  3. 请求头由「请求行 + 头部字段」构成,响应头由「状态行 + 头部字段」构成;
  4. 请求行有三部分:请求方法,请求目标和版本号;
  5. 状态行也有三部分:版本号,状态码和原因字符串;
  6. 头部字段是 key-value 的形式,用 : 分隔,不区分大小写,顺序任意,除了规定的标准头,也可以任意添加自定义字段,实现功能扩展;
  7. HTTP/1.1 里唯一要求必须提供的头字段是 Host,它必须出现在请求头里,标记虚拟主机名

参考资料