HTTP 协议在规范文档里详细定义了报文的格式,规定了组成部分,解析规则,还有处理策略,所以可以在 TCP/IP 层之上实现更灵活丰富的功能,例如连接控制,缓存管理、数据编码、内容协商等等。
请求行
GET / HTTP/1.1
状态行
HTTP/1.1 200 OK
HTTP 协议规定了非常多的头部字段,实现各种各样的功能,但基本上可以分为四大类:
通用字段:在请求头和响应头里都可以出现;
请求字段:仅能出现在请求头里,进一步说明请求信息或者额外的附加条件;
响应字段:仅能出现在响应头里,补充说明响应报文的信息;
实体字段:它实际上属于通用字段,但专门描述 body 的额外信息。
HTTP 报文结构就像是“大头儿子”,由“起始行 + 头部 + 空行 + 实体”组成,简单地说就是“header+body”;
HTTP 报文可以没有 body,但必须要有 header,而且 header 后也必须要有空行,形象地说就是“大头”必须要带着“脖子”;
请求头由“请求行 + 头部字段”构成,响应头由“状态行 + 头部字段”构成;
请求行有三部分:请求方法,请求目标和版本号;
状态行也有三部分:版本号,状态码和原因字符串;
头部字段是 key-value 的形式,用“:”分隔,不区分大小写,顺序任意,除了规定的标准头,也可以任意添加自定义字段,实现功能扩展;
HTTP/1.1 里唯一要求必须提供的头字段是 Host,它必须出现在请求头里,标记虚拟主机名。
Host:请求字段,只能出现在请求头。是必须出现的字段
User-Agent:是请求字段,只能出现在请求头里。
Date:是通用字段,通常出现在响应头,标识HTTP报文创建的时间,客户端可以使用这个时间再搭配其他字段决定缓存策略
Server字段是响应字段,只能出现在响应头里。告诉客户端当前正在提供Web服务的软件名称和版本号。
Content-Length:标识报文里body的长度。