目录
1.http历史
2.http 2.0
3.http 优化
4.https
5.三次握手四次挥手
http历史
1.91年的 0.9版本,只有get,只能取html字符串;
2.96年的1.0版本,有post,发送任何格式内容;
但是一个TCP连接只能发一个请求,不能复用;
3.97年的1.1版本,现在最流行的版本
(1)持久连接,默认TCP不关闭,一个域名最多了6个持久连接;
(2)管道机制,可以同时发多个请求,服务器按顺序收和返回。
问题:按顺序响应,容易队头堵塞;
4.SPDY:09年谷歌研发的协议,解决1.1效率不高的问题,当做2.0的基础;
http 2.0
1.多路复用,双工通信,避免队头堵塞;
数据流机制判断乱序的数据包属于哪个请求;
2.二进制协议,解析更快,效率更高;
3.头部信息压缩,减小请求体积,节省带宽
4.服务器推送
http优化
1.减少http请求
(1)使用雪碧图合并小图片
(2)no image,颜色单一的图案尽量用字体图标
(3)webpack可以把小图片base64压缩到js中
(4)合并css和js文件;
2.减少DNS查询(进行缓存);
3.避免重定向;
4.使用HTTP2;
HTTPS
HTTP的问题
1.明文传输可能被窃听;
2.认证问题,服务器和客户端都可能是伪装的,用户的权限无法验证;
3.可能被篡改,中间人攻击;
HTTPS介绍
1.超文本传输安全协议;
2.基于TLS/SSL 传输层安全协议,可以防止窃听和篡改;
3.TLS和SSL的关系:SSL是TLS的前身;TLS是SSL的标准化;
4.TLS/SSL协议的三个基本算法:
非对称加密,对称加密,散列函数
5.信鸽例子,理解对称和非对称加密
(1)对称加密:收发双方规定密钥,字母偏移5位加密;
A.加密的人也能解密,这就是对称;
B.问题:密钥需要传递,传递的过程中,可能被窃听和篡改
(2)非对称加密:
A.发送人留着钥匙,把带锁(开启状态)的盒子传过去,加密的人锁上;加密的人自己解不开,就是非对称;
B.问题:可能被窃听更换掉盒子
C.认证机构来给盒子做签名,也就是我们HTTPS需要的网站证书;
6.总结:
非对称可靠但慢,对称的高效性但不可靠;配合使用
非对称加密进行身份验证和密钥交换,对称加密进行数据的加密;
三次握手四次挥手
为什么要三次握手:
确保客户端和服务端都能确认双方收发正常;
(1)第一次握手:客户端–什么都不能确认;服务端–确认对方发送正常;
(2)第二次:客户端–自己发和收正常,对方收和发正常;服务端–对方发,自己收;
(3)第三次:客户端–自己发和收,对方收和发;服务端–对方收发,自己收发;
为什么要发送特定的数据包?
三次握手的另一个目的是确认双方都支持TCP协议;
(1)第一次,客户端发seq=x
(2)第二次server猜测client要建立TCP,但不能确定,发送ack为x+1,seq = y;
(3)第三次,客户端知道服务端支持TCP,知道自己要建立TCP,发送ack = y+1, seq = x+1;
最后,服务端知道客户端支持TCP,确定双方要建立TCP连接;
seq,ack,SYN和ACK是什么意思?
(1)seq: 数据包本身的序列号;
(2)ack: 期望对方继续发送的那个数据包的序列号;
(3)SYN标志位,1表示请求连接;
(4)ACK就是ack后面加上的数字
为什么要四次挥手
(1)根本原因,客户端发送FIN表示自己发完了数据,但是还允许对方继续发送剩下的数据。
(2)比如打电话:A:我没啥说的了;B:知道了;可能还会说些;B:我也说完了;A:知道了;
数据包的格式
和握手同理,+1表示确认。
以上:http最常见的问题都总结好了
欢迎随时交流~
如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理