http1.0:
无状态,无连接
http1.1:
文本解析 缓存处理(强缓存,协商缓存) 长连接 请求管线化 tcp
缓存处理是为了优化性能
管线化使客户端不用再等待上一次请求得到的响应,就能进行下一次请求,可以并发处理网络请求
基于tcp实现流量控制
http请求是在收到响应后就结束的,长连接是指的TCP连接,而不是HTTP连接
而HTTP请求和HTTP响应,都是通过TCP连接这个通道来回传输的
长连接情况下,多个HTTP请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗
http2:
性能提升 多路复用 头部压缩 消息封装成二进制 客户端和服务的实现流量控制
HPACK 头部压缩 请求增加 头部字段占用带宽 头部压缩可以消除冗余,限制攻击漏洞,满足一些内存要求
多路复用 所有数据流共用一个连接,可以更有效的使用tcp链接
http3:
基于QUIC
tcp不支持流级复用,对象在同一个流中,对象级无法区分,无法在一个流中复用数据包
三次握手,会有冗余的消息交换序列
间歇性的挂起数据传输,造成行头阻塞
QUIC放弃了 tcp,通过udp建立,降低延迟,解决队头拥塞问题
http和https:
http 1.不加密 2.无法证明完整性 3.不验证通信方的身份
https就解决这三个问题
SSL/TLS 身份验证和加密的一种协议
TLS的基本运行过程:
公钥加密法
客户端向服务端索要公钥->公钥加密信息->服务器收到密文->服务器用自己的私钥解密
SSL/TLS协议的基本过程是这样的:
(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通信。
协议握手过程:
A:客户端 B:服务器
1.A->B ssl最高版本号 客户端生成的随机数 客户端加密方法...
2.B->A 确认双方使用的加密方法,给出数字证书,服务器生成的随机数
3.A确认数字证书有效,生成新随机数,用数字证书的公钥加密 发送给B
4.B使用自己的私钥,获取A的随机数
5.A,B根据约定的加密方法,生成 对话密钥 用来加密接下来的整个对话过程
长,短轮询:
应用场景:
一个电商中商品详情的页面,这个详情界面中有一个字段是库存量。
而这个库存量需要实时的变化,保持和服务器里实际的库存一致。
长轮询和短轮询最大的区别是,短轮询去服务端查询的时候,不管库存量有没有变化,服务器就立即返回结果了。
浪费服务器和客户端的资源
而长轮询则不是,在长轮询中,服务器如果检测到库存量没有变化的话,将会把当前请求挂起一段时间。
在这个时间里,服务器会去检测库存量有没有变化,检测到变化就立即返回,否则就一直等到超时为止。
请求挂起同样会导致资源的浪费