HTTP 1.0 1.1 2.0 3.0 的特点及其区别
HTTP 1.0
无状态,无连接
短连接:每次发送请求都要重新建立tcp请求,即三次握手,非常浪费性能
无host头域,也就是http请求头里的host,
不允许断点续传,而且不能只传输对象的一部分,要求传输整个对象
HTTP 1.1
长连接,流水线,使用connection:keep-alive使用长连接
请求管道化
增加缓存处理(新的字段如cache-control)
增加Host字段,支持断点传输等
由于长连接会给服务器造成压力
HTTP 2.0
二进制分帧
流(stream):已建立连接上的双向字节流。
消息:与逻辑消息对应的完整的一系列数据帧。
帧(frame):HTTP2.0通信的最小单位,每个帧包含头部,至少也会标识出当前所属的流(stream_id)
所有HTTP2.0通信都在一个TCP链接上完成,这个链接可以承载任意流量的双向数据流。
每个数据流以消息的形式发送,而消息由一或多个帧组成。这些帧可以乱序发送,然后再根据每个帧头部的流标识符(Stream_id)重新封装。
可见,HTTP2.0实现了真正的并行传输,它能够在一个TCP上进行任意数量的HTTP请求。而这个强大的功能基于“二级制分帧”的特性。
头部压缩,双方各自维护一个header的索引表,使得不需要直接发送值,通过发送key缩减头部大小
多路复用(或连接共享),使用多个stream,每个stream又分帧传输,使得一个tcp连接能够处理多个http请求
服务器推送(Sever push)
HTTP 3.0
基于google的QUIC协议,而quic协议是使用udp实现的
0-RTT(Round-Trip Time:往返时延。是指数据从网络一端传到另一端所需的时间。) — QUIC协议相比HTTP2.0的最大优势:缓存当前会话的上下文,下次恢复会话的时候,只需要将之前的缓存传递给服务器,验证通过,就可以进行传输了。
向前纠错机制
QUIC协议有一个非常独特的特性,称为向前纠错(Foward Error Connec,FEC),每个数据包除了它本身的内容之外还包括了其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。
解决了http 2.0中前一个stream丢包导致后一个stream被阻塞的问题
优化了重传策略,重传包和原包的编号不同,降低后续重传计算的消耗
连接迁移,不再用tcp四元组确定一个连接,而是用一个64位随机数来确定这个连接
更合适的流量控制
链接:https://www.infoq.cn/article/kU4OkqR8vH123a8dLCCJ
select加锁分析(Mysql)
https://www.cnblogs.com/rjzheng/p/9950951.html