7 HTTP 的报文

1 报文结构

TCP的报文

  • TCP头部数据:20字节,发送方的端口号、接收方的端口号、包序号、标志位。
  • 实际传输的数据:通常大小是 1460 字节

HTTP协议的报文

起始行+头部字段结合+消息正文

  1. 起始行(strat line):描述请求或响应的基本信息
  2. 头部字段集合(header):使用 key-value 形式更详细地说明报文,前面这两部分合称请求头响应头
  3. 消息正文(entity):实际传输的数据,二进制数据,也叫实体body

报文必须有 header,但是可以没有body(如 get 请求报文),在 header 之后必须要有一个“空行”,即“CRLF”,十六进制的“0D0A”。

7 HTTP 的报文

2 请求行:request line

请求方法+请求目标+版本号,空格隔开,CRLF 换行结束。

  1. 请求方法:是一个动词,如 get/post ,表示对资源的操作
  2. 请求目标:通常是一个 URI,标记了 请求方法要操作的资源
  3. 版本号:表示报文使用的HTTP协议版本

3 状态行:status line

版本号+状态码+原因

  1. 版本号:表示报文使用的 HTTP 协议版本
  2. 状态码:三位数,如 200 是成功,500 是服务器错误
  3. 原因:作为数字状态码补充,是更为详细的解释文字,帮助人理解原因

4 头部字段

  1. 请求行或状态行再加上头部字段集合就构成了 HTTP 报文里完整的请求头 或 响应头。
  2. 头部字段 是 key-value 的形式,key和value之间用 “:” 分隔,最后用 CRLF 换行表示字段结束
  3. HTTP 头部支持自定义

使用头字段的注意点:

  1. 字段名 不区分大小写
  2. 字段名 不允许出现空格
  3. 字段名后面必须紧接着 “:”,不能有空格,而 “:” 后的字段值前可以有多个空格
  4. 字段的顺序是没有意义的,可以任意排列不影响语义

5 常用头字段

种类很多,基本分为 四大类:

  1. 通用字段:在请求头和响应头里都可以出现
  2. 请求字段:只能出现在请求头里,补充说明请求信息或额外条件
  3. 响应字段:仅能出现在响应头里,补充说明响应报文的信息
  4. 实体字段:实际上属于通用字段,但是专门描述 body 的额外信息。

对报文的解析实际上就是对头字段的处理。

基本的头信息

  1. Host 头

  2. Uesr-Agent

  3. Date 字段

  4. Server 字段

基本的实体字段

  1. Content-length

7 HTTP 的报文

上一篇:php封装参数检查


下一篇:CVE-2020-14882 (weblogic未授权命令执行)