缓存技术
强制缓存
浏览器向服务端请求数据,根据是否设置响应报文中的Cache-controll字段。若是,则在下一次请求时,先查看一下缓存时间是否过期。没过期,则使用缓存数据
协商缓存
浏览器向服务器请求资源,先会执行强制缓存,查看缓存是否过期。若过期,向服务器请求询问服务器的资源是否被修改过。修改过则返回200状态码,浏览器刷新缓存。没修改则返回304状态码,浏览器使用之前的缓存。
具体的协商过程有两种,1.浏览器缓存了资源的最后一次修改时间这个字段,资源过期了,通过发送最后一次修改的时间到服务器,服务器来判断资源是否被修改,修改了则200,没修改304。2.浏览器保存了资源的唯一标识,资源过期了,通过发送这个资源标识到服务器,服务器来判断资源是否被修改(有点类似乐观锁CAS),修改了则200,没修改304。
HTTP1.1的优点与缺点
优点
1.简单 (就键值对,你说简不简单) 2.易扩展(自定义添加键值对) 3.跨平台 (应用层协议)
缺点
1.明文传输 2.无状态 3.不安全
HTTP1.1的性能
性能改进
1.支持长连接 2.支持管道传输(同时发送多个请求) 3.解决了请求队头阻塞
性能缺点
1.没有解决相应的队头阻塞 2.头部字段没有压缩且多次相互发送相同的头部字段,造成冗余 3.没有控制优先级 4.请求只能由浏览器发起
HTTP2.0的性能优化
1.压缩了请求头与响应头,通信双发都维护了包含头部字段的表,只发送头字段的索引。
2.每个HTTP数据报都成为Stream流,为每一个流设置唯一编号,可以指定流的优先级,可以并发发送流。
3.HTTP不在应用层上使用文本格式传输数据,使用二进制格式传输
4.采用多路复用技术,解决了相应队头阻塞。多路复用技术 本质是可以并发处理多个连接Socket发生的事件。
5.服务器可主动推送静态文件
HTTP2.0的缺点
存在在TCP层面的队头阻塞,因为在HTTP2.0上发送的数据成为流,流都有自己的唯一编号,所能够并发发送流。但在TCP层面发送数据会分片,收到数据时需要组装成完成的HTTP包才会被HTTP层获取。所以当在网络传输过程中出现丢失了一个流,则在TCP层面会出现队头阻塞。
HTTP3.0
基于 UDP 的 QUIC 协议
1.调整传输层为应用层提供的服务,流之间不需要组装完成才提供到应用层。所以不存在队头阻塞
2.quic协议三次握手,是为了确认双方的连接ID。并且在握手过程中包含了SSL协议的过程
3.通过连接ID的唯一标识,当网络出现切换,不会发生重新握手,无缝复用原连接,达到了连接迁移的功能
HTTP与HTTPS的区别
1.HTTPS比HTTP多加了一层SSL/TLS协议
2.HTTPS非对称加密就换秘钥,使用秘钥加密传输数据
3.HTTP端口80 HTTPS端口443
4.HTTPS需要向CA申请整数,来保证服务器的可信
5.HTTPS使用混合加密(对称加密与非对称加密传输)、使用对明文采取摘要算法算出指纹并发送到浏览器、向CA申请数字证书(将浏览器的公钥发到证书上)