• http1,http1.1,http2及http3


    http1的问题:

    1.浏览器阻塞,浏览器对于同一个域名同时请求个数是有限制,根据浏览器内核不同,限制请求个数是不一,但基本是个位数,超过请求个数就会阻塞,必须等前面的请求完成
    2.DNS查询,域名解析是比较费时的,但通常可以利用DNS缓存来减少域名解析时间,DNS查询顺序为:浏览器缓存-电脑hosts文件-本地DNS服务器-根域名服务器-顶级域名服务器
    3.建立连接,http是基于tcp的,每次建立连接需要进行三次握手和四次挥手

    http1.1

    http1.1比http1多了:
    1.长连接(默认开启)
    2. 增加了更多的缓存策略,比如,Cashe-Control ,E-Tag、If-None-MatchHTTP1.0使用的是Expires,last-modified、If-Modified-Since
    3.错误通知管理409和410 4.Host头域,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。4.HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
    5. 带宽优化:在请求头中多了一个rang的区域,可以更加方便的传输部分数据,充分利用带宽

    https://blog.csdn.net/mxw2552261/article/details/78898909

    http1.0和http1.1现存的问题

    http1.0
    每一次传输数据都需要重新建立连接,延迟较多
    传输均为明文,客户端和服务端均无法验证双方身份,存在一定的数据安全
    请求的header部分内容较大,增加传输成本,且很多时候header部分是不变的

    http1 状态行和头部却没有经过任何压缩,直接以纯文本传输

    http1.1

    http1.1的长连接+流水线;在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

    http1.1长连接默认开启,会对队头堵塞,可使用pipline多并发但只支持get等幂等请求

    队头堵塞:在请求应答过程中,如果出现任何状况,剩下所有的工作都会被阻塞在那次请求应答之后。这就是“队头阻塞”,它会阻碍网络传输和Web页面渲染,直至失去响应

    http1.1 流水线(pipline)问题:因为返回的时候是会阻塞的(队头堵塞),并且指定不了优先级,谁先到达,谁先返回,顺序绝对不能乱。另一个pipeline限制是,只能是幂等请求(get、head等)才能应用

    虽然http1.1有长连接的功能,但长连接使用过多也给服务端带来了更大的性能压力,特别是对于一些图片类视频类等资源型的服务器,如果长期保持长连接他是没必要的,但给服务器是大的性能浪费

    http2.0

    http2 多路复用允许单一的 HTTP/2 连接同时发起多重的请求-响应消息

    多路复用(多路传输),能同时处理多个消息的请求和响应; 甚至可以在传输过程中将一个消息跟另外一个掺杂在一起。所以客户端只需要一个连接就能加载一个页面。

    http1 状态行和头部却没有经过任何压缩,直接以纯文本传输

    头部压缩 需要在支持 HTTP/2 的浏览器和服务端之间

    https://blog.csdn.net/mxw2552261/article/details/78898909

    node中配置开启http2

    http://t.zoukankan.com/lydialee-p-9167781.html

    http3.0

    http3.0区别: 1.将帧的概念下移到了QUIC层 。QUIC特点:TCP 3次握手是1 RTT , 第三次握手才正式开始传输数据 2.不使用tcp协议,使用udp协议(这么说不准确,其实是使用了QUIC协议)

    https://blog.csdn.net/Squid87/article/details/124407454

    由于当下http3.0还是正式推出,Nginx当前最新版本也不支持配置,所以如果要自己在自己的网站上使用http3.0还是很麻烦的,还得自己编译一个nginx内核。

    https://m.yisu.com/zixun/506316.html

    体验感受一下http3.0请求,只需在最新版本的chrome浏览器,然后给它开启 QUIC 特性即可

    https://cloud.tencent.com/developer/article/2016600

  • 相关阅读:
    C#项目版本号自定义位置自动向上增加小工具设计与实现
    一键式AI绘画,让你也能体验当画师的魅力(附原理分析)
    NRF24L01-2.4G模块的使用
    “逆境中的经济悖论:衰退与通胀之争,解读未来的经济迷局!“
    小米汽车上市进入倒计时,已开启内部试驾
    设计模式之十:状态模式
    微擎模块 维修店3.4.2 公众号+小程序双端共用版源码
    Ajax加强
    大数据架构系列:如何理解湖仓一体?
    Leu-Trp-Leu-COOH,42293-99-2
  • 原文地址:https://blog.csdn.net/c62387723sq/article/details/127630831