HTTP 建立之初,是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。但随着CSS,Javascript的出现,以及移动互联时代的到来,我们不得不对HTTP进行不断地优化。

    HTTP优化:
    影响一个 HTTP 网络请求的因素主要有两个方面:带宽和延迟。
    随着网络基础建设的完善,带宽因素已经不需要再考虑,仅需要考虑的就是延迟。延迟主要受三个方面影响:浏览器阻塞(HOL blocking), DNS查询(DNS Lookup),建立连接(Initial connection).

    1 HTTP1.0及HTTPS
    (1)HTTP1.0
    请求与响应支持 HTTP 头,响应含状态行,增加了状态码,
    支持 HEAD,POST 方法
    支持传输 HTML 文件以外其他类型的内容
    HTTP1.0 使用的是非持久连接,主要缺点是客户端必须为每一个待请求的对象建立并维护一个新的连接,即每请求一个文档就要有两倍RTT 的开销。因为同一个页面可能存在多个对象,所以非持久连接可能使一个页面的下载变得十分缓慢,而且这种 短连接增加了网络传输的负担。

    注:
    RTT(Round Trip Time):一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值;

    (2)HTTP1.1
    支持长连接。
    在HTTP1.0的基础上引入了更多的缓存控制策略。
    引入了请求范围设置,优化了带宽。
    在错误通知管理中新增了错误状态响应码。
    增加了Host头处理,可以传递主机名(hostname)。
    缺点:
    传输内容是明文,不够安全

    (3)HTTPS
    HTTPS运行在安全套接字协议(Secure Sockets Layer,SSL )或传输层安全协议(Transport Layer Security,TLS)之上,所有在TCP中传输的内容都需要经过加密。
    连接方式不同,HTTP的端口是80,HTTPS的端口是443.
    HTTPS可以有效防止运营商劫持。
    注:
    SSL运行在TCP之上

    (4)HTTP 1.x优化(SPDY)
    SPDY 并不是新的一种协议,而是在 HTTP 之前做了一层会话层。为了达到减少页面加载时间的目标,SPDY 引入了一个新的二进制分帧数据层,以实现优先次序、最小化及消除不必要的网络延迟,目的是更有效地利用底层 TCP 连接。

    多路复用,为多路复用设立了请求优先级。
    对header部分进行了压缩。
    引入了HTTPS加密传输。
    客户端可以在缓存中取到之前请求的内容。

    2 HTTP2.0(SPDY的升级版)
    HTTP2.0支持明文传输,而HTTP 1.X强制使用SSL/TLS加密传输。
    和HTTP 1.x使用的header压缩方法不同。
    HTTP2.0 基于二进制格式进行解析,而HTTP 1.x基于文本格式进行解析。
    多路复用,HTTP1.1是多个请求串行化单线程处理,HTTP 2.0是并行执行,一个请求超时并不会影响其他请求。
    HTTP2.0的多路复用提升了网页性能:

    在 HTTP1 中浏览器限制了同一个域名下的请求数量(Chrome下一般是六个),当在请求很多资源的时候,由于队头阻塞,当浏览器达到最大请求数量时,剩余的资源需等待当前的六个请求完成后才能发起请求。
    HTTP2 中引入了多路复用的技术,这个技术可以只通过一个 TCP连接就可以传输所有的请求数据。多路复用可以绕过浏览器限制同一个域名下的请求数量的问题,进而提高了网页的性能。
    注意:

    主流浏览器只支持基于TLS部署的HTTP2.0协议,所以要将网站升级为HTTP 2.0,就需要先升级为HTTPS。
    HTTP 2.0完全兼容HTTP 1.x,所以对于部署了HTTP 2.0的网站可以自动向下兼容HTTP 1.X.

    3 HTTP 3.0 (QUIC)
    QUIC (Quick UDP Internet Connections), 快速 UDP 互联网连接。
    QUIC是基于UDP协议的。

    两个主要特性:
    (1)线头阻塞(HOL)问题的解决更为彻底:
    基于TCP的HTTP/2,尽管从逻辑上来说,不同的流之间相互独立,不会相互影响,但在实际传输方面,数据还是要一帧一帧的发送和接收,一旦某一个流的数据有丢包,则同样会阻塞在它之后传输的流数据传输。而基于UDP的QUIC协议则可以更为彻底地解决这样的问题,让不同的流之间真正的实现相互独立传输,互不干扰。
    (2)切换网络时的连接保持:
    当前移动端的应用环境,用户的网络可能会经常切换,比如从办公室或家里出门,WiFi断开,网络切换为3G或4G。基于TCP的协议,由于切换网络之后,IP会改变,因而之前的连接不可能继续保持。而基于UDP的QUIC协议,则可以内建与TCP中不同的连接标识方法,从而在网络完成切换之后,恢复之前与服务器的连接。

    参考博客:
    [1] QUIC协议浅析与HTTP/3.0
    [2] HTTP3.0
    ————————————————
    版权声明:本文为CSDN博主「长不大的大灰狼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/glpghz/article/details/106063833