1. HTTP历史
HTTP历史及其功能:
- 1991:HTTP/0.9
- 只接收GET方法,不支持请求头;
- 1996:HTTP/1.0
- 基本成型,支持富文本、header、状态码、缓存等等;
- 1999:HTTP/1.1
- 支持连接复用、分块发送;
- 2009:SPDY
- HTTP/2前身
- 2013:QUIC
- 第三代协议,基于UDP实现TCP+HTTP/2并优化;
- 2015:HTTP/2
- 第二代协议,多路复用、头部压缩、服务器推送等等;
- 2018:HTTP/3
- QUIC更名为HTTP/3
Google在2009年设计了基于TCP的SPDY,但并未通过,但SPDY的开发组全程参与HTTP/2的制定过程,参考了SPDY的很多设计。
由于TCP相较于UDP在传输效率上天然的劣势,Google于2013年开发了基于UDP的名为QUIC(Quick UDP Internet Connections)的传输层协议,希望其可以替代TCP,使得网页数据传输更加高效。后经提议,互联网工程任务组正式将基于QUIC协议的HTTP重命名为HTTP/3。
2. HTTP协议
HTTP(Hyper Text Transfer Protocol,超文本传输协议),是用于万维网浏览器的传输协议。
2.1 HTTP/0.9
第一个版本的HTTP协议。
协议特性:
- 无状态;
- 仅支持客户端发送GET请求,不支持请求头;
- 由于没有协议头,其仅能传输超文本;
- 无错误返回码;
GET /index.html
2.2 HTTP/1.0
第二个版本的HTTP协议
新增功能:
- 支持HEAD、GET、POST请求;
- 支持长连接、缓存机制(cache)及身份认证(authorization);
- 请求与响应支持头域(HTTP header);
- 响应对象以响应状态行开始;
- 响应对象不局限于超文本;
- 状态码(status code)、多字符集支持、多部分发送、内容编码(content encoding)等;
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: */*
要求:头信息必须是ASCII码,后面数据可以是任何格式。
2.3 HTTP/1.1
第三个版本的HTTP协议,目前使用最为广泛的协议版本。
新增内容:
- 支持OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法;
- 管道机制;
- Content-Length 字段;
- 分块传输编码;
协议特性:
- 默认为长连接;
- 提供范围请求功能;
- 提供虚拟主机功能(HOST域);
- 新增缓存处理字段;
- 错误通知的管理;
存在队头阻塞
问题。
2.4 SPDY协议
2009年谷歌公开自行研发的SPDY协议,解决了HTTP/1.1效率不高的问题。
2.5 QUIC协议
QUIC基于UDP,并结合TCP、TLS和HTTP/2
QUIC优点:
- 零RTT建立连接;
- 连接迁移(不在依赖于TCP连接中使用的四元组);
- 队头阻塞/多路复用;
- 拥塞控制;
- 热插拔;
- 流量控制;
2.6 HTTP/2
第四个版本的HTTP协议。
新增内容:
- 二进制分帧;
- 多路复用;
- 头部压缩;
- 请求优先级;
- 服务端推送;
头信息和数据体均为二进制,统称为帧
。