深入剖析http内涵 http下载是什么( 五 )


④服务器的最后响应
从客户端收到第三个随机数(预主密钥)后,服务器通过协商的加密算法计算这次通信的会话密钥 。
然后,客户端会收到最后一条消息:
加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信 。服务器握手结束通知,表示服务器的握手阶段已经结束 。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验 。至此,SSL/TLS的握手阶段全部结束 。接下来,客户端和服务器进入加密通信时,都是使用普通的HTTP协议,只是使用会话密钥对内容进行加密 。
HTTP/1.1、HTTP/2和HTTP/3的演进
说说HTTP/1.1和HTTP/1.0的性能对比?
HTTP/1.1相对于HTTP/1.0的性能提升;
使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销 。支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间 。然而,HTTP/1.1仍然存在性能瓶颈:
请求/响应头部(Header)未经压缩就发送,首部信息越多延迟越大 。只能压缩 Body 的部分 。发送冗长的首部 。每次互相发送相同的首部造成的浪费较多 。服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞 。没有请求优先级控制 。请求只能从客户端开始,服务器只能被动响应 。以上HTTP/1.1的性能瓶颈,HTTP/2有哪些优化?HTTP/2协议是基于HTTPS的,所以HTTP/2的安全性也得到了保证 。
与HTTP/1.1相比,HTTP/2的性能提高:
①头部压缩
HTTP/2将压缩标题 。如果您同时发出多个请求,并且它们的报头相同或相似,那么该协议将帮助您消除重复点 。
这就是所谓的HPACK算法:客户端和服务器端都维护一个头信息表,所有字段都会存储在这个表中,并生成一个索引号 。以后不发同样的字段,只发索引号,提高速度 。
②二进制格式
HTTP/2不再像HTTP/1.1中的纯文本消息,而是全面采用二进制格式 。
头信息和数据体是二进制的,统称为帧:头信息帧和数据帧 。
消息区别
虽然这样对人不友好,但是对计算机很友好,因为计算机只知道二进制,所以接收到消息后,不需要把明文消息转换成二进制,而是直接解析二进制消息,增加了数据传输的效率 。
③数据流
HTTP/2数据包不是按顺序发送的,同一连接中连续的数据包可能属于不同的响应 。因此,必须对数据包进行标记,以表明它属于哪个响应 。
每个请求或响应的所有数据包称为一个流 。
每个数据流都标有唯一的编号,指定客户端发送的数据流编号为奇数,服务器发送的数据流编号为偶数 。
客户端还可以指定数据流的优先级 。高优先级请求,服务器将首先响应请求 。
HTT/1 ~ HTTP/2
④多路复用
HTTP/2意味着可以在一个连接中同时发送多个请求或响应,而不需要按顺序一一对应 。HTTP/1.1中的串口请求被去掉,不需要排队等待,不会再出现“队列头阻塞”的问题,减少了延迟,大大提高了连接利用率 。
比如在一个TCP连接中,服务器收到来自客户端A和B的两个请求,如果发现A的处理非常耗时,就会响应A已经处理的部分,然后响应B,再响应A的其余部分 。
多路技术
⑤服务器推送[/s2/]
HTTP/2也在一定程度上改进了传统的“请求-响应”工作模式 。该服务可以主动向客户端发送消息,而不是被动响应 。
比如浏览器在刚请求HTML时,主动将可能用到的JS、CSS文件等静态资源提前发送给客户端,以减少延迟等待,也就是服务器推送(也称缓存推送) 。
HTTP/2有哪些缺点?HTTP/3有哪些优化?HTTP/2的主要问题是多个HTTP请求在复用一个TCP连接,下层TCP协议不知道有多少个HTTP请求 。
因此,一旦发生丢包,TCP的重传机制就会被触发,这样一个TCP连接中的所有HTTP请求都必须等待丢失包的重传:
HTTP/1.1 中的管道( pipeline)传输中如果有一个请求阻塞了,那么队列后请求也统统被阻塞住了 HTTP/2 多请求复用一个TCP连接,一旦发生丢包,就会阻塞住所有的 HTTP 请求 。这都是基于TCP传输层的,所以HTTP/3把HTTP下的TCP协议改成了UDP!
HTTP/1 ~ HTTP/3
UDP的发生与顺序或丢包无关,所以在HTTP/1.1中不会出现队列头阻塞,在HTTP/2中会重新传输所有丢包 。
大家都知道UDP不可靠,但是基于UDP的QUIC协议可以实现类似TCP的可靠传输:
QUIC 有自己的一套机制可以保证传输的可靠性的 。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响 。TL3 升级成了最新的 1.3 版本,头部压缩算法也升级成了 QPack 。HTTPS 要建立一个连接,要花费 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手 。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数 。TCP HTTPS(TLS/1.3)和QUIC HTTPS


推荐阅读