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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/60700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter自定义按钮-文本按钮

目录 前言 需求 实现 前言 最近闲着无聊学习了flutter的一下知识,发现flutter和安卓之间,页面开发的方式还是有较大的差异的,众所周知,android的页面开发都是写在xml文件中的,而flutter直接写在代码里(da…

Unity 之利用 localEulerAngle与EulerAngle 控制物体旋转

文章目录 概念讲解localEulerAngle与EulerAngle的区别 概念讲解 欧拉角(Euler Angles)是一种常用于描述物体在三维空间中旋转的方法。它使用三个角度来表示旋转,分别绕物体的三个坐标轴(通常是X、Y和Z轴)进行旋转。这…

【开源ESP32谷歌恐龙小游戏】【游戏演示和介绍】LVGL ST7789 适用于Arduino

【源码及教程地址-持续更新】 ESP32 C3 LVGL 迷你小电视 Google谷歌恐龙小游戏 1.9寸LCD显示屏开发板 ST7789 适用于Arduino开发板,教程,资料,程序,代码,PDF手册 【开源 & ESP32谷歌恐龙小游戏】【游戏演示和介绍】LVGL ST7789 适用于Arduin

数据分享|R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据...

全文链接:http://tecdat.cn/?p22813 本教程为读者提供了使用频率学派的广义线性模型(GLM)的基本介绍。具体来说,本教程重点介绍逻辑回归在二元结果和计数/比例结果情况下的使用,以及模型评估的方法(点击文末“阅读原文…

Vue3 学习 组合式API setup语法糖 响应式 指令 DIFF(一)

文章目录 前言一、Composition Api二、setup语法糖三、响应式refreactive 四、其他一些关键点v-prev-oncev-memov-cloak 五、虚拟Dom五、diff算法 前言 本文用于记录学习Vue3的过程 一、Composition Api 我觉得首先VUE3最大的改变就是对于代码书写的改变,从原来选择…

Kafka3.0.0版本——Follower故障处理细节原理

目录 一、服务器信息二、服务器基本信息及相关概念2.1、服务器基本信息2.2、LEO的概念2.3、HW的概念 三、Follower故障处理细节 一、服务器信息 三台服务器 原始服务器名称原始服务器ip节点centos7虚拟机1192.168.136.27broker0centos7虚拟机2192.168.136.28broker1centos7虚拟…

怎样做一个知识库网站

经济和信息技术的蓬勃发展,知识资源成为了企业非常重要的无形资产。 当前,企业的核心竞争力不仅取决于硬件设备、财务实力、资源多寡、人员数量等生产因素,更加取决于企业对于知识的掌握、运用、传承和创新。 制作企业知识库,传…

IDEA快速设置全局JDK

出bug 了 JDK 不识别了,才想起来要设置jdk ,现在一般查到的都是setting 设置全局的idea设置。但是老玩家的我怎么会不知道有一个设置全局jdk 的一个设置 setings 设置是对idea 的基础设置。 但是还有一个隐藏页面快捷键【CtrlAltShiftS】 接下来自己研究…

lucene国内镜像 极速下载

文章目录 国内镜像汇总-极速下载【JavaPub版】 lucene国内镜像 https://mirrors.cloud.tencent.com/apache/lucene/ 国内镜像汇总-极速下载【JavaPub版】

在PHP中安装Composer并管理Vue前端依赖包

系列文章目录 文章目录 系列文章目录前言一、安装Composer二、使用Composer管理PHP依赖包三、使用npm管理Vue前端依赖包总结 前言 在开发Web应用程序时,使用Composer来管理PHP的依赖包和Vue前端的依赖包是一种很常见的做法。Composer是PHP的包管理工具,…

JVM内存管理、内存分区:堆、方法区、虚拟机栈、本地方法栈、程序计数器

内存管理 内存分区 线程共享 堆 存放实例,字符串常量(直接引用),静态变量,线程分配缓冲区(TLAB线程私有)。垃圾收集器管理的区域 方法区 非堆,和堆相对的概念。存储已被虚拟机加载的…

java中定时任务 schedule 分布式下没有锁住 时间不同步 执行滞后 相对时间 系统时间 spring springboot

java.util.Timer计时器可以进行:管理任务延迟执行(“如1000ms后执行任务”),及周期性执行(“如每500ms执行一次该任务”)。 但是,Timer存在一些缺陷,应考虑使用ScheduledThreadPoolExecutor代替,Timer对调度的支持是基…

linux 权限管理命令

权限管理命令 权限的查看及含义 可以使用ls -l来查看每个文件或目录的权限,一共有十位 ls -ls--------------------------------------------------------------------rw-------. 1 root root 946 Feb 14 16:13 anaconda-ks.cfgdrwxr-xr-x. 2 root root 4096 Feb…

互联网摸鱼日报(2023-08-31)

互联网摸鱼日报(2023-08-31) 36氪新闻 融创中期业绩解读:物管、文旅增长态势明显 卓越商企服务公布上半年成绩单:夯实发展基础,高派息回馈股东 让手机连上卫星,到底有多难? 企业数字化转型不要盲目跟风瞎折腾 东方…

Qt 解析XML文件 QXmlStreamReader

如何使用QXmlStreamReader来解析格式良好的XML,Qt的文档中指出,它是一种更快、更方便的Qt自己的SAX解析器(QXmlSimpleReader)的替代,它也较快,在某种情况下,比DOM(QDomDocument&…

c++ | time 小结

通过查看源码分析 namespace std {using ::clock_t; // clock_t x; X clock(); //获取程序跑了多久using ::time_t; // time_t y; y time(NULL); //从纪元开始计算 相当于程序从1970年开始跑// 获取当前时间 time_t current_time; //current_time time(NULL); //或…

【MySQL系列】-ORDER BY……HAVING详解及limit

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

MongoDB实验——在Java应用程序中操作 MongoDB 数据

在Java应用程序中操作 MongoDB 数据 1. 启动MongoDB Shell 2. 切换到admin数据库,使用root账户 3.开启Eclipse,创建Java Project项目,命名为MongoJava File --> New --> Java Project 4.在MongoJava项目下新建包,包名为mo…

Android scrollTo、scrollBy、以及scroller详解 自定义ViewPager

Scroller VelocityTracker VelocityTracker 是一个速度跟踪器,通过用户操作时(通常在 View 的 onTouchEvent 方法中)传进去一系列的 Event,该类就可以计算出用户手指滑动的速度,开发者可以方便地获取这些参数去做其他…

【期末复习笔记】计算机操作系统

计算机操作系统 进程的描述与控制程序执行进程进程的定义与特征相关概念定义特征进程与程序的区别 进程的基本状态和转换PCBPCB中的信息作用PCB的组织方式 线程进程与线程的比较 处理机调度与死锁处理机调度处理机调度的层次 调度算法处理机调度算法的目标处理机调度算法的共同…