HTTP1.1 的问题
最核心的问题,在于带宽利用率不高,有三个原因:
1、TCP 慢启动机制
2、多个TCP连接之间会抢夺带宽资源,使得关键资源的下载不能得到更多的带宽
3、HTTP 队头阻塞问题(一个TCP连接同一时间只能处理一个请求,也就是串行的。下个请求必须等待上个请求完成才能开始,一旦上个请求被阻塞,下个请求就得跟着阻塞)
HTTP2
针对 HTTP1.1 的问题,HTTP/2 的解决方案可以总结为:一个域名只使用一个 TCP 长连接和消除队头阻塞问题。一个长连接就只会有一次慢启动,也不存在竞争资源(帧中可以指定流的优先级确保关键资源优先传输),也不会有HTTP队头阻塞,都是并行传输的。

该图就是 HTTP/2 最核心、最重要且最具颠覆性的多路复用机制。从图中你会发现每个请求都有一个对应的 ID,如 stream1 表示 index.html 的请求,stream2 表示 foo.css 的请求。这样在浏览器端,就可以随时将请求发送给服务器了。
- 多路复用
- 二进制帧
- 头部压缩
- 服务端推送
HTTP2 的缺陷
TCP队头阻塞问题,三次握手的网络延迟
HTTP3
基于 UDP 的 QUIC 协议
HTTPS的原理

1、浏览器发送加密套件+client-random到服务器
2、服务器返回非对称加密套件+server-randow+数字证书到浏览器
3、浏览器验证数字证书后得到服务器公钥,再用公钥加密一个随机字符串pre-master发给服务器
4、服务器用私钥解密得到pre-master,并返回确认信息给浏览器
5、浏览器和服务器用 client-random+server-random+pre-master三者生成对称加密用的秘钥 master-secret并开始通信
问题1:浏览器如何确认服务器的正确性?
浏览器拿到数字证书后,会对证书上的明文信息加密得到信息摘要A,再用CA的公钥解密数字签名得到信息摘要B,若A=B,则服务器器合法。所以数字证书的关键在于CA用其自己的秘钥加密得到的数字签名
其他
- 关于 OPTIONS 请求
作用:获取服务器支持的HTTP请求方法 & 用来检查服务器的性能
当发生接口跨域时,非简单请求会发生 OPTIONS 请求。简单请求一般满足两个条件
1、请求方法为 GET,POST,HEAD
2、请求头仅限于以下几类:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
不满足这两个条件的都叫非简单请求。所以对于 delete,put 请求一定会发生 OPTIONS 请求,对于请求类型为 application/json 也会发生 OPTIOINS 请求
和跨域有关的请求头:
Access-Control-Allow-Origin,Access-Control-Allow-Credentials(是否需要cookie),Access-Control-Allow-Headers - TCP 队头阻塞问题
持久连接keep-alive虽然能减少 TCP 的建立和断开次数,但是它需要等待前面的请求返回之后,才能进行下一次请求。如果 TCP 通道中的某个请求因为某些原因没有及时返回,那么就会阻塞后面的所有请求,这就是著名的队头阻塞的问题。 - RTT 概念
我们把从浏览器发送一个数据包到服务器,再从服务器返回数据包到浏览器的整个往返时间称为 RTT
参考:
https://www.nihaoshijie.com.cn/index.php/archives/698/
网友评论