1.HTTP/0.9
- 超文本传输协议
- 主要传输文本信息
- 特点
- 1.只有请求行
- 2.服务器没有返回响应头信息
- 3.ASIIC码形式传输
2.HTTP/1.0
- 解决问题
- 实现多类型文件的下载,音视频,css,js图片等等
- 改进
- 增加请求头字段
content-charset content-type content-encoding coentent-language - 增加响应行
响应行状态码 200 201 301 302 304 400
- 实现请求缓存机制,强缓存字段
expire - 识别服务器信息,用户代理字段,
proxy
- 增加请求头字段
- 问题
- 短连接,每个http请求都要建立一次tcp链接
- 队头阻塞
- 不支持虚拟主机,每个域名绑定了一个唯一的 IP 地址,因此一个服务器只能支持一个域名
- 动态内容支撑,content-length长度是固定的
- 安全方面不支持,cookie等安全
3.http/1.1
- 改进
- 长连接
Connect:Keep-alive 默认是开启的;Connection: close来关闭
- 加强了缓存处理
增加了强缓存
cache-control字段,协商缓存etag,If-Unmodified-Since, If-Match, If-None-Match等字段 - 对头阻塞优化,管线化技术
- 曾加了范围请求,
Range字段 - 增加了Host字段,虚拟主机
- Chunk transfer 机制
- 增加了错误 status code
- 长连接
- 效率提升
览器为每个域名最多同时维护 6 个 TCP 持久连接
使用 CDN 的实现域名分片机制
- 问题
- 1.TCP 的慢启动
- 2.多个并发的tcp链接的宽带竞争
- 3.对头阻塞问题
4.http/2.0
-
协议栈
- HTTP
- HPack /Stream
- TLS 1.2+
- TCP
- IP
- MAC
-
特点
-
头部压缩
- HPack对头部字段进行压缩
- 没有了起始行,改用伪字段,:status
- 客户端与服务器都维护了一张静态表与动态表,发送与响应数据时只要发送或者响应key就行
-
二进制帧形式传输
- headers frame + data frame
-
虚拟流
- stream ID 客户端ID为奇数,服务器端为偶数
- 双向传输序列,
- 服务器能自己建流,向客户端推送消息
- 并发多个流,多路复用,解决了队头阻塞问题
-
一个域名只用一个TCP链接
-
-
改进
- 多路复用
- 头部压缩
- 设置请求的优先级
- 服务器推送
-
问题
- TCP还是会有对头阻塞问题
5.http/3.0
QUIC 协议代替TCP协议,解决了TCP队头阻塞