HTTP 报文结构是怎样的?
参考答案:
对于 TCP 而言,在传输的时候分为两个部分:TCP头和数据部分。
而 HTTP 类似,也是header + body的结构,具体而言:
起始行 + 头部 + 空行 + 实体
由于 http 请求报文和响应报文是有一定区别,因此我们分开介绍。
起始行
对于请求报文来说,起始行类似下面这样:
GET /home HTTP/1.1
也就是方法 + 路径 + http版本。
对于响应报文来说,起始行一般长这个样:
HTTP/1.1 200 OK
响应报文的起始行也叫做状态行,由http版本、状态码和原因三部分组成。
值得注意的是,在起始行中,每两个部分之间用空格隔开,最后一个部分后面应该接一个换行,严格遵循ABNF语法规范。
头部
展示一下请求头和响应头在报文中的位置:


不管是请求头还是响应头,其中的字段是相当多的,而且牵扯到http非常多的特性,这里就不一一列举的,重点看看这些头部字段的格式:
- 字段名不区分大小写
- 字段名不允许出现空格,不可以出现下划线_
- 字段名后面必须紧接着冒号 :
空行
很重要,用来区分开头部和实体。
如果说在头部中间故意加一个空行,那么空行后的内容全部被视为实体。
实体
就是具体的数据了,也就是body部分。请求报文对应请求体, 响应报文对应响应体。
题目要点:
TCP和HTTP都采用分段的方式传输数据,每个段包含头部和数据两部分。对于HTTP而言,其报文结构如下:
起始行
- 请求报文:起始行包括方法(如GET)、路径(如/home)和HTTP版本(如HTTP/1.1)。
- 响应报文:起始行称为状态行,包括HTTP版本、状态码(如200)和原因短语(如OK)。
头部
HTTP报文中的头部字段名不区分大小写,字段名不允许出现空格,也不可以出现下划线_。字段名后面必须紧接着冒号 :。
空行
空行用来分隔头部和实体,它的存在是必须的,用于告诉服务器头部结束,实体开始。如果在头部中插入一个空行,那么这个空行后面的所有内容都将被视为实体。
实体
实体即HTTP报文中的数据部分,对于请求报文,它通常被称为请求体;对于响应报文,它被称为响应体。