HTTP发展历程

HTTP总的发展阶段是1.0->1.1->2.0->3.0

HTTP1.0

这个阶段的HTTP还比较简陋,有几个重要的缺陷:

**1.是短连接形式,无法复用连接,**即每个资源文件的请求都要新建一个tcp连接

2.请求必须按顺序进行,即当前请求收到响应后才能发下一个请求,有队头阻塞

3.无法解析host域

4.无法断点续传

HTTP1.1

这个阶段的HTTP就相对成熟很多了,针对1.0的缺点做出了很多改进

1.默认长连接,即一个连接可以承担多个请求响应

2.假如了管道机制,解决了请求者的队头阻塞问题, 请求方不用再等待响应回来,而是可以继续发送新的请求,但是响应方依然要等待顺序的请求发送响应,若前面的请求阻塞,则后面的请求都会被阻塞,这是http应用层的问题

3.支持了Host头域,支持虚拟主机

Host就是我们通常所说的域名,同一台服务器,或者说同一个ip 可以对应多个Host,这就是虚拟主机,DNS解析就是要解析出Host对应的ip是多少,然后请求到达服务器后,服务器再根据Host进行路由

4.完全支持断点续传,即支持范围请求

其他的改进:

5.新增了更多的状态码比如100(先询问服务器是否同意) 409 206(断点续传)

6.新增了更多了请求方式 如PUT DELETE

7.支持分快传输,传输数据时数据无需加载完毕

HTTP2.0

1.不再使用明文传输,改用二进制帧,用数据流传输(Stream)

这里要说明白,流是一个请求响应级别的概念,每个请求响应对应一个流,而帧是由响应或响应拆分成的,一般来说会拆成一个头帧(请求方法和路径)+多个data帧(body),把这些帧通过tcp传输,tcp由会把这些帧拆成很多tcp段,然后到达后根据序列化组装成帧,交由http对应的流处理器处理。

**2.彻底解决了队头阻塞问题(响应可以不按顺序发送,由客户端自行排序组合(流本身也是乱序的))**真正实现了多路复用

**3.队头压缩:**HPAK算法

4.支持服务器推送

但是仍存在tcp队头阻塞的问题: 即客户端必须等待tcp组合完所有的数据后才能收到数据,若中间有数据丢包,需要阻塞等待断点续传,会影响其他请求的流传输,这是tcp传输层的问题

为什么说1.1的问题是应用层 而2.0就是传输层问题呢

1.1的问题在于 即使tcp很畅通 没有丢包问题 他照样会阻塞,这是应用层本身的问题

而2.0就不一样了 丢包导致的阻塞就是你协议自己的特性,跟我应用层根本没有关系

HTTP3.0

1.基于QUIC协议: 这个协议基于UDP,自实现了可靠的udp传输,不存在队头阻塞,若丢包仅仅影响当前流,不影响其他请求的流,即每个流是独立的

相关推荐
老李IT笔记5 小时前
连不上不一定是网不好:新系统不认的服务端配置卡在哪一档
运维·服务器·网络
小此方6 小时前
Linux网络(二十八):从NAT转换到正反向代理:图解内网通信、NAPT端口映射
linux·运维·网络
万年咸鱼6 小时前
WebSocket、Socket 与 HTTP 的区别详解
websocket·网络协议·http
9527出列6 小时前
基于oss的断点续传实现
http·性能优化
万年咸鱼6 小时前
HTTPS 是如何保证传输安全的?
网络协议·安全·https
隐擎fox7 小时前
深入 Android 移动端风控与协议层对抗:内核级虚拟环境检测、网络堆栈特征伪装与住宅 IP 协同实战
android·网络·python·网络协议·tcp/ip
Da Da 泓7 小时前
[项目] --- 基于websocket的网页五子棋(可多用户)
网络·websocket·网络协议·多线程·项目
lazy H7 小时前
【计算机网络】第 2 篇:一条数据如何穿过网络?彻底理解数据封装与解封装
网络·经验分享·后端·学习·计算机网络
一木 之林7 小时前
微信小程序开发全攻略·文章版|05 路由·交互·网络与音乐播放器实战
网络·微信小程序·小程序·交互
yunlaodacom8 小时前
华为云国际站服务代理商:BMS数据库延迟突然升高?磁盘I/O、网络与CPU排查方法
网络·数据库·华为云