zonglang / code

平时写的代码练习
1 stars 0 forks source link

http协议相关 #18

Open zonglang opened 5 years ago

zonglang commented 5 years ago

掘金文章

  1. 服务器 =公钥=> 权威机构
  2. 权威机构 =私钥加密生成数字证书=> 服务器
  3. 服务器 =数字证书=> 客户端
  4. 客户端内置权威机构公钥校验通过
  5. 客户端 =使用服务器公钥加密私钥=> 服务器
  6. 开始使用共享密钥通信

HTTP的进阶史

http1.x的缺陷
1. 连接无法复用
    三次握手的延时已经慢启动对大量小文件影响比较大
    1.0默认每次请求都需要重新建立连接
    2.0采用keep-alive可以复用一部分连接,
    但是域名分片的情况还是要建立多个连接
2. HOLB(Head-Of-Line Blocking)
    1.0必须一个请求之后才能下一个请求
    1.1使用流水线(pipeline),即同一域名,同一tcp中可以发送多个请求
    但是返回的请求必须是按顺序的,所以前一个可能也会阻塞后一个
3. 协议开销大
    header携带的内容过大,并且header基本上不怎么变化
4. 安全性
    明文传输,客户端服务端无法验证对方身份
二进制分帧,多路复用(stream的概念),
实际上,http1.x的问题出现在了同步请求上,
http1.0的请求必须是一个接一个的同步请求,
有一种hack的方法就是域名分片(利用多个tcp进行异步)
http1.1从协议层次上进行了优化,加入流水线(pipeline),可以实现异步发送请求,但是响应还是同步的,并且不能设置优先级。
http2又从协议的层次上优化,利用二进制分帧,实现了并行交错的请求与响应,并且可以设置优先级。

对header进行处理,
客户端与服务端共同维护一个‘首部表’,指发送header的差异

server push,
服务器主动推送,遵守同源策略,客户端可以拒绝
http2是从http协议上进行优化,
而http3是从传输层上优化,基于UDP实现了QUIC协议
由于stream的概念还是在http层次,所以tcp一旦丢包,就得全部重传,
在udp的层次实现stream的概念
0-RTT(减少了TCP握手和TLS握手)(利用无连接的特性)
多路复用(实现stream的概念)
加密认证
向前纠错(解决不可靠)

TCP和UDP的比较 一文读懂HTTP2,HTTP3 MDN HTTP1.x