HTTP请求流程
点击网页到内容展示背后发生了什么
解析URL
DNS域名解析
浏览器缓存
计算机缓存,域名表,本地hosts文件
域名服务器,运营商有代理服务器(本地服务器),根服务器,顶级域名服务器,权限域名服务器
递归查询
迭代查询
HTTP协议
加密
对称加密,同一把秘钥(AES,DES),秘钥传递不安全
缺点:秘钥传递不安全,容易泄露
非对称加密,RSA等
优点:解决了秘钥泄露问题
缺点:攻击者可以把自己的公钥替换成服务端的公钥给客户端,客户端用公钥加密后传递,攻击者截取信息后用自己的私钥解密,然后再用服务端的公钥加密,再传递给服务端,进而达到长期监听的目的,这就是中间人攻击。
CA机构,服务端将自己的公钥发给CA机构,CA机构会将这些信息非对称加密加密起来,加密后的东西变成了证书,之后送给服务端(电话,电子邮件,物理邮件)。之后把CA私钥送给客户端(浏览器自带,计算机出厂自带),以方便客户端解密证书。之后的通信,服务端要先把证书发给客户端,只要客户端能够解密证书就说明证书没有被篡改过。
优点:解决了中间人攻击的问题
缺点:非对称加密耗时,更费资源
非对称加密传递对称加密的秘钥
缺点:像RSA之类的非对称加密生成秘钥的过程非常耗费资源,秘钥固定,一旦泄露,历史消息也都不再安全,不具备前向保密性
DH秘钥交换(基于离散对数DH秘钥交换)(基于椭圆曲线的ECDH秘钥交换)
优点:生成私钥过程耗费资源少。
tls1.2是目前使用最广泛的版本,但是流程太繁琐
tls1.3做了大胆的改进,把所有要传递的加密材料,随机数等合并发送,只需要一个来回就能完成安全通信建立
http1.0
短连接
http1.1
长连接,加了保持连接的机制,请求完成后不会立马关闭
但是后面请求需要等待前面请求结束,如果一个网页同时加载的文件特别多就会产生很长的等待时间
管线化机制(pipelining)允许多个请求一起发出,无需等待上一个请求响应,但是此时仍然存在问题,例如前面请求数据特别大或丢失就会堵塞后面的请求,尽管后面的请求可以跑的很快也被迫慢下来
http2,将单个请求数据做了拆分,拆分成若干个小块,对方接受后按顺序重组,虽然总传输时间不变,但是拆分后,小请求更快完成加载体验上更好。因为头部高度一致hpack头部压缩。
http3,基于UDP解决了队头堵塞
TCP