HTTP,加入光荣的进化吧!

191 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

HTTP 1.0

HTTP 1.0 规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。建立连接需要三次握手,断开连接需要四次挥手。连接无法复用,这就很浪费啦!!

HTTP 2.0

主要基于SPDY协议。HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语义兼容的基础上,进一步减少了网络的延迟。

头部压缩: 在http1.1及之前,请求体一般会有压缩编码的过程,但是没有针对头部进行压缩,当请求字段很复杂时,尤其是get请求几乎全是请求头,http2.0针对头部进行压缩,采用Hpack算法。首先是在服务器和客户端建立哈希表,将用到的字段存在这张表,在传输时只需要将索引值传入即可,对方那索引值去查表即可。

多路复用: HTTP2.0中,基于二进制分帧层,HTTP2.0可以在共享TCP连接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将他们重新组装起来。 通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。

二进制分帧: HTTP/2 干脆把报文全部换成二进制格式,全部传输01串,方便了机器的解析。原来Headers + Body的报文格式如今被拆分成了一个个二进制的帧,用Headers帧存放头部字段,Data帧存放请求体数据。分帧之后,服务器看到的不再是一个个完整的 HTTP 请求报文,而是一堆乱序的二进制帧。这些二进制帧不存在先后关系,因此也就不会排队等待,也就没有了 HTTP 的队头阻塞问题。使用了更小的传输单位,并且不再考虑传输的顺序,在帧中加入序号,也方便在丢失某个帧后,不需要重走整个请求,只需对丢失的帧进行重传。

HTTPS

1. 浏览器将自己支持的一套加密规则发送给网站.

2.网站从中选出一组加密算法与hash算法,并将自己的身份信息以整数的方式发给浏览器,证书里包括网站地址,加密的公钥,等信息

3.浏览器收到证书之后,验证证书的合法性,如果证书合法,会在浏览器栏里显示一个小锁头,否则提示不信任,如果证书受信任,或者用户接受了不信任的证书,浏览器会生成一串随机数的密码,并用证书中的公钥加密,使用约定好的hash算法计算握手信息,并使用生成的随机数对信息进行加密,最后将生成的所有信息发送给网站

4. 网站接受到浏览器发来的数据之后,1.使用自己的私钥将信息解密出来,取出密码,使用密码解密浏览器发来的握手信息,并验证hash是否与浏览器发来的一致,使用密码加密一段握手信息,发给浏览器。

5.浏览器解密并计算握手信息的hash,如果与服务器发来的hash一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生产的随机密钥并利用协商好的对称加密进行加密