http1.0,http1.1,http2.0,http3.0 区别有哪些

news2025/1/31 12:28:40

20 世纪 60 年代,美国国防部高等研究计划署(ARPA)建立了 ARPA 网,这被认为是互联网的起源。70 年代,研究人员基于对 ARPA 网的实践和思考,发明出了著名的 TCP/IP 协议。该协议具有良好的分层结构和稳定的性能,并在 80 年代中期进入了 UNIX 系统内核,促使更多的计算机接入了网络。

1989 年,蒂姆伯纳斯-李博士发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。在篇文章中他确立了三项关键技术:URI、HTML、HTTP。

以下是HTTP发展年鉴表:

HTTP1.0最早在网页中使用是在1996年,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的web服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了WEB2.0以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的HTML页面有了CSS,Javascript,来丰富我们的页面展示,当ajax的出现,我们又多了一种向服务器端获取数据的方法,这些其实都是基于HTTP协议的。 

一、HTTP1.0和HTTP1.1的一些区别

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议,负责在客户端和服务器之间传递和交换数据。下面是HTTP 1.0、HTTP 1.1和HTTP 2.0之间的主要区别:

①.在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

②.带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

③.错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

④.Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

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

二、HTTP2.0 新特性

①.新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

②.多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方根据request的 id将request再归属到各自不同的服务端请求里面。

③.header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,差量更新HTTP头部,只发送改变的,既避免了重复header的传输,又减小了需要传输的大小。

④.服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。

三、HTTP3.0 新特性

HTTP 3.0,也称为HTTP over QUIC(Quick UDP Internet Connections),是基于UDP协议的下一代HTTP协议。相对于HTTP 2.0,HTTP 3.0引入了一些新的特性和改进:

①.基于UDP协议:HTTP 3.0使用QUIC协议(Quick UDP Internet Connections)代替了TCP协议作为传输层协议。UDP协议相比TCP协议具有更低的延迟和更好的拥塞控制,能够提供更好的性能和效率。

②.0-RTT连接建立:HTTP 3.0引入了0-RTT(Zero Round-Trip Time)连接建立。这意味着客户端可以在第一次连接时发送加密数据,而无需等待服务器的响应,从而减少了握手的延迟。

③.多路复用:HTTP 3.0保留了HTTP 2.0的多路复用特性,允许在一个连接上同时发送多个请求和响应。这可以减少连接的数量,提高网络的利用率和性能。

④.头部压缩:HTTP 3.0使用了与HTTP 2.0相同的头部压缩机制,可以减小请求和响应的头部大小,减少了网络传输的开销。

⑤.服务器推送:HTTP 3.0支持服务器推送,服务器可以在客户端请求之前主动将资源推送给客户端,从而加快页面加载速度,提供更好的用户体验。

⑥.容错性:HTTP 3.0具有更好的容错性,当网络发生变化时,可以更快地恢复连接,避免了TCP的连接重启所需的握手延迟。

这些新特性使得HTTP 3.0在性能、效率和安全性方面有所提升。然而,由于HTTP 3.0仍然处于实验阶段,并且在广泛部署和普及方面还存在一些挑战,因此在实际应用中还未得到广泛支持。

四、协议特性对比

特性HTTP 1.0HTTP 1.1HTTP 2.0HTTP 3.0
并发连接数量单一请求一个连接多个请求多个连接多个请求单一连接多个请求多个连接
请求流水线不支持支持支持支持
请求头压缩不支持不支持支持支持
数据压缩不支持不支持支持支持
二进制传输不支持不支持支持支持
多路复用不支持不支持支持支持
服务器推送不支持不支持支持支持
加密可选可选可选强制
连接建立优化不支持不支持支持支持
QUIC协议使用不支持不支持不支持支持

五、解决的核心问题

协议版本解决的核心问题解决方式
0.9HTML 文件传输确立了客户端请求、服务端响应的通信流程
1.0不同类型文件传输设立头部字段
1.1创建/断开 TCP 连接开销大建立长连接进行复用
2并发数有限二进制分帧
3TCP 丢包阻塞采用 UDP 协议

需要注意的是,HTTP 1.1目前仍然是最广泛使用的HTTP协议版本。这些不同版本的HTTP协议在性能、效率、安全性和功能方面有所不同,HTTP 2.0和HTTP 3.0在多路复用、头部压缩和服务器推送等方面进行了较大的改进和优化,提供了更好的性能和用户体验。HTTP 3.0作为最新的版本,目前仍在发展和探索中,尚未得到广泛支持。

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

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

相关文章

Docker部署开源项目Django-CMS企业内容管理系统

Docker部署开源项目Django-CMS企业内容管理系统 一、Django-CMS介绍1.1 Django-CMS简介1.2 Django-CMS特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载django-cms-quic…

JS 之 事件Event对象详解(属性、方法、自定义事件)

一、Event对象 1、简介 ​ 事件event对象是指在浏览器中触发事件时,浏览器会自动创建一个event对象,其中存储了本次事件相关的信息,包括事件类型、事件目标、触发元素等等。浏览器创建完event对象之后,会自动将该对象作为参数传…

NLP——WordNet;Word Similarity; Word Sense Disambiguition

WordNet WordNet是一个广泛使用的英语词汇数据库和语义网络。它由普林斯顿大学认知科学实验室开发,旨在帮助人们理解单词之间的关系和意义。WordNet的主要目标是将英语词汇组织成一种层次结构,其中每个词都与其他相关词联系起来。WordNet中的单词按照它们…

[6]PCB设计实验|认识常用元器件|电阻器|18:30~19:00

目录 一、电阻器主要用途 1. 稳定和调节电路中的电流和电压 2. 作为分流、分压和负载使用 二、常见电阻器 1. 贴片电阻 2. 热敏电阻 3. 限流电阻 4. 可调电阻 5. 排阻(网络电阻) 三、几种常用电阻器的结构特点 四、电阻的参数 1. 额定功率 电阻器功率的表示 ​2…

自学黑客/网络安全工具软件大全100套

黑客工具软件大全100套 1 Nessus:最好的UNIX漏洞扫描工具 Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上。它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance–终端用户授权…

【六一儿童节】回忆一下“童年的记忆”

文章目录 [TOC](文章目录) 前言一、EasyX带我们步入了童话的世界1.1绘画哆啦A梦2.2绘画出来喜羊羊 二、我的六一故事总结 前言 我们都有过童年,并且从现在看来,童年是我们最希望可以回去的那段时光,那时候的我们傻傻的,并且很天真…

电子元器件解析02之电容(一)——定义与性能参数

下篇文章:电子元器件解析02之电容(二)——电容分类与应用场景:https://blog.csdn.net/weixin_42837669/article/details/131142767 摘要 电容是最基本的电子元器件之一,本文介绍了电容的定义,并总结了电容的各个性能参数&#xff…

leetcode143. 重排链表(java)

重排链表 leetcode143. 重排链表题目要描述 解题思路代码链表专题 leetcode143. 重排链表 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/reorder-list 题目要描述 给定一个单链表 L 的头节点 head ,单链表 …

根据字节、华为、阿里、腾讯等大厂整理的2023最新面试热点问题,还不行我也救不了你了~

大厂面试热点问题 1、测试人员需要何时参加需求分析? 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工作的开展越有利 可以尽早的确定测试思路 减少与开发人员的交互 减少对需求理解上的偏差 2、软件测试与调试的关系 测…

MM32F3273G8P火龙果开发板MindSDK开发教程11 -获取msa311加速器的xyz轴数据

MM32F3273G8P火龙果开发板MindSDK开发教程11 -获取msa311加速器的xyz轴数据 1、msa311简介 使用i2c总线 可以读取xyz轴的加速度 可以监测单击双击事件 可以监测运动与静止状态 可以监测自由落体事件,可用来监测摔倒或跌落。 可以监测旋转事件,类似手机…

工作中自我或者团队管理的几个有用工具

个人或者团队管理过程中,采用一些有效的管理工具或者方法,可以提升工作效率和结果。它们包括SMART原则、PDCA循环、SWOT分析、5W2H分析、鱼骨图分析、七个凡是。这几个工具或者方法之间有互通性,比如,PDCA循环中,在P这…

数学建模预备知识(1)全网最全的数学建模竞赛汇总,别再被坑了!

🌅*🔹** φ(゜▽゜*)♪ **🔹*🌅 欢迎来到馒头侠的博客,该类目主要讲数学建模的知识,大家一起学习,Qq及各类联系方式在图片上! 喜欢的朋友可以关注下,下次更新不迷路&…

【MySQL】为什么MySQL选择B+Tree来做索引?

B树和B树的区别? B树 B树 B*树 B树和B树的区别 (1)存储量大:B树叶子及非叶子节点存索引数据,B树叶子非叶子节点存索引,叶子节点存数据; (2)查找速度: 查单个值&…

细说websocket - php篇

下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket 套接字做了封装处理,开发者使用的时候只需要考虑数据的交互而不用处理连接的建立…

运营-22.内容分发

内容分发 内容分发本质要解决的问题包含两点: 1. 高效的连接人与信息; 2. 过滤出有价值的信息,让合适的人看到合适的信息 。 常见的内容分发方式: 1. 编辑分发; 2. 订阅分发; 3. 社交分发; 4. 算…

Oracle中使用【Interval】对【日期】进行【相加减】,报错 ORA-01839:指定月份的日期无效(Interval的坑)

文章目录 1. 前言2. 先说结论3. 案例演示 1. 前言 最近在对某些表进行旧数据的删除,必然是通过【时间】删除之前较为久远的数据,比如1年前,6个月前,7天前的数据等等情况,这个时候的SQL,必然会出现条件&…

pandas---数据结构(Series、DataFrame 和 MultiIndex)创建方式、属性

1. 数据结构 Pandas中一共有三种数据结构,分别为:Series、DataFrame 和MultiIndex。 其中Series是一维数据结构,DataFrame是二维表格型数据结构,MultiIndex是三维数据结构。 1.1 Series Series是一个类似于一维数组的数据结构…

【LeetCode】每日一题 -- 1170. 比较字符串最小字母出现频次 -- Java Version

题目链接:https://leetcode.cn/problems/compare-strings-by-frequency-of-the-smallest-character/ 1. 题解(1170. 比较字符串最小字母出现频次) 昨天的每日一题 2699. 修改图中的边权 有点难,研究了一会儿,学习了一…

文件讲解—【C语言】

目录 1.为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 4. 文件的顺序读写 4.1 顺序读写函数介绍 4.2 对比一组函数 例子 例子 5.3 rewind 例子 6. 文本文件和二进制文件 测试代…

机器学习 day15(神经网络的工作原理,激活值a的公式)

1. 隐藏层的内部实现 如图通常来说,该模型一共有两层,不包括输入层(layer 0),第一层是隐藏层(layer 1),第二层是输出层(layer 2),我们可以用方括…