• Http 1.0 1.1 2.0 3.0 版本差别


    Http 1.0

    发布年份:1996 非官方标准

    • 短链接:每一次请求都对应一次TCP的连接与释放

      • 开销大:每次请求都要TCP的连接与释放
      • 队头阻塞:每次请求都必须等上一次请求获得响应之后,才可以发送;效率低下
    • 缓存:在HTTP1.0中主要使用header里的协商缓存 last-modified(上次修改时间),if-modified-since(是否修改),强缓存 Expires(缓存过期时间);减少了不必要的网络传输

    Http 1.1

    发布年份:1997 官方标准,并长期使用

    • 长连接:HTTP1.1增加Connection字段,通过设置Keep-Alive保持HTTP连接不断开。避免每次客户端与服务器请求都要重复建立释放建立TCP连接。提高了网络的利用率。

    如果客户端想关闭HTTP连接,可以在请求头中携带Connection:false来告知服务器关闭请求。

    • 管道化(pipelining):HTTP1.1支持请求管道化(pipelining)。TCP连接之后,Http可以像流水线一样,连续发送多次请求,而不必等待上一次请求响应之后再发送

    需要注意的是:服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户端能够区分出每次请求的响应内容。也就是说,HTTP管道化可以让我们把先进先出队列从客户端(请求队列)迁移到服务端(响应队列)。
    可见,HTTP1.1还是无法解决队头阻塞的问题。同时“管道化”技术存在各种各样的问题,所以很多浏览器要么根本不支持它,要么直接默认关闭,并且开启的条件很苛刻……而且好像实际也没有什么用处。

    由此可见,管线化并不是真正的并行的传输,现阶段的浏览器厂商采取了另外一种做法,它允许我们打开多个TCP的会话。eg.Chrome一般是6个

    • 缓存:加入了一些新的字段如cache-control,支持断点传输
    • Host 标头:使得一个服务器能够用来创建多个Web站点

    Http 2.0

    发布年份:2015 官方标准,逐渐普及中

    • 头部压缩: HTTP2.0会压缩(Header)部分;如果同时多个请求其头部一样或相似,那么协议会消除重复部分。

    利用HPAK算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,就不用重复发送同样字段了,只发送索引号,减少数据量提高速度

    • 二进制格式: HTTP/1.0和HTTP/1.1中,报文都是纯文本的格式简单易读;而在2.0中采用了二进制的格式,不再可读;数据以数据流(stream)的形式以字节单位发送,数据包可以不按顺序发送

    • 多路复用协议: 真正的并行的请求能在同一个链接中处理,移除了 HTTP/1.x 中顺序和阻塞的约束。
      在这里插入图片描述

    在HTTP2.0中,对头阻塞是发生在TCP层面

    • 服务端推送: 服务端不再是被动地响应,可以主动向客户端发送消息、推送额外的资源。

    在实际中应用的也比较少

    Http 3.0

    发布年份:2022 官方文档 逐渐普及中

    • QUIC协议: 而QUIC是基于 UDP 协议,不需要三次连接进行握手,而且也会缩短 TLS 建立连接的时间。解决了队头阻塞问题。

    在这里插入图片描述

    参考资料

    • https://blog.csdn.net/weixin_45910068/article/details/126290248
    • https://xiaolincoding.com/network/2_http/http_interview.html#http-1-1%E3%80%81http-2%E3%80%81http-3-%E6%BC%94%E5%8F%98
    • https://zhuanlan.zhihu.com/p/266578819
    • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP
  • 相关阅读:
    【JavaEE初阶】 线程池详解与实现
    MATLAB关系运算
    名牌大学毕业,在名企担任程序员月薪5万,却为何选择离职当司机
    〖Python 数据库开发实战 - Redis篇③〗- Mac系统下通过homebrew安装Redis数据库
    Flink入门系列06-window
    Linux---(三)基本指令大全
    speech studio-神经网络定制自己的声音
    【AI学习指南】八、PaddlePaddle自然语言处理-PaddleNLP的进阶应用
    1372. Longest ZigZag Path in a Binary Tree
    java计算机毕业设计springboot+vue在线医院服务系统
  • 原文地址:https://blog.csdn.net/weixin_50799082/article/details/132590951