1 报文结构
TCP的报文
- TCP头部数据:20字节,发送方的端口号、接收方的端口号、包序号、标志位。
- 实际传输的数据:通常大小是 1460 字节
HTTP协议的报文
起始行+头部字段结合+消息正文
- 起始行(strat line):描述请求或响应的基本信息
- 头部字段集合(header):使用 key-value 形式更详细地说明报文,前面这两部分合称请求头或响应头
- 消息正文(entity):实际传输的数据,二进制数据,也叫实体或body
报文必须有 header,但是可以没有body(如 get 请求报文),在 header 之后必须要有一个“空行”,即“CRLF”,十六进制的“0D0A”。
2 请求行:request line
请求方法+请求目标+版本号,空格隔开,CRLF 换行结束。
- 请求方法:是一个动词,如 get/post ,表示对资源的操作
- 请求目标:通常是一个 URI,标记了 请求方法要操作的资源
- 版本号:表示报文使用的HTTP协议版本
3 状态行:status line
版本号+状态码+原因
- 版本号:表示报文使用的 HTTP 协议版本
- 状态码:三位数,如 200 是成功,500 是服务器错误
- 原因:作为数字状态码补充,是更为详细的解释文字,帮助人理解原因
4 头部字段
- 请求行或状态行再加上头部字段集合就构成了 HTTP 报文里完整的请求头 或 响应头。
- 头部字段 是 key-value 的形式,key和value之间用 “:” 分隔,最后用 CRLF 换行表示字段结束
- HTTP 头部支持自定义
使用头字段的注意点:
- 字段名 不区分大小写
- 字段名 不允许出现空格
- 字段名后面必须紧接着 “:”,不能有空格,而 “:” 后的字段值前可以有多个空格
- 字段的顺序是没有意义的,可以任意排列不影响语义
5 常用头字段
种类很多,基本分为 四大类:
- 通用字段:在请求头和响应头里都可以出现
- 请求字段:只能出现在请求头里,补充说明请求信息或额外条件
- 响应字段:仅能出现在响应头里,补充说明响应报文的信息
- 实体字段:实际上属于通用字段,但是专门描述 body 的额外信息。
对报文的解析实际上就是对头字段的处理。
基本的头信息
-
Host 头
-
Uesr-Agent
-
Date 字段
-
Server 字段
基本的实体字段
- Content-length