HTTP 多个版本

news2024/11/23 2:16:30

了解一下各个版本的HTTP。

上个世纪90年代初期,蒂姆·伯纳斯-李(Tim Berners-Lee)及其 CERN的团队共同努力,制定了互联网的基础,定义了互联网的四个构建模块:

  • 超文本文档格式(HTML)

  • 数据传输协议(HTTP)

  • 用于查看超文本的网络浏览器(第一个浏览器,WorldWideWeb)

  • 用于传输数据的服务器(httpd的早期版本)

HTTP重用了现有的 TCP/IP 协议来进行数据传输,其中 HTTP 消息字节位于应用层,如下图中的浅蓝色所示。

图片

1、HTTP/0.9

这是第一个 HTTP草案。它只有一个 GET方法,也不支持头部或状态代码;唯一可用的数据格式是 HTML。就像 HTTP/1.0和 HTTP/1.1一样,HTTP消息以 ASCII文本结构呈现。

HTTP/0.9请求的示例:

GET /mypage.html

响应示例:

<html>A verysimple HTML page</html>

2、HTTP/1.0

这个版本定义了现在所用的 HTTP结构,类似于一份备忘录,同时引入了新的方法(HEAD和POST)、MIME类型、状态码和协议版本。

HTTP/1.0请求的示例:​​​​​​​

GET /mypage.html HTTP/1.0User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

响应示例:​​​​​​​

200 OKDate: Tue, 15 Nov 1994 08:12:31 GMTServer: CERN/3.0 libwww/2.17Content-Type: text/html<HTML>A page with an image<IMGSRC="/myimage.gif"></HTML>

3、HTTP/1.1

这个版本于1997年初推出,距离其前身只有几个月。主要变化包括:

  • 持久的TCP连接(keep-alive),可以节省机器和网络资源。在之前的版本中,每个请求都要打开一个新的TCP连接,并在响应后关闭。

  • Host头部,支持在同一个IP下有多个服务器。

  • 有关编码、缓存、语言和MIME类型的头部约定。

HTTP/1.1请求的示例:​​​​​​​

GET /api/fruit/orange HTTP/1.1Host: www.fruityvice.comAccept-Encoding: gzip, deflate, br

响应示例:​​​​​​​

HTTP/1.1 200 OKServer: nginx/1.16.1Date: Sun, 10 Mar 2024 20:44:25 GMTTransfer-Encoding: chunkedConnection: keep-aliveX-Content-Type-Options: nosniffX-XSS-Protection: 1; mode=blockCache-Control: no-store, must-revalidate, no-cache,max-age=0Pragma: no-cacheX-Frame-Options: DENYContent-Type: application/jsonExpires: 0{"name":"Orange","id":2,"family":"Rutaceae","order":"Sapindales","genus":"Citrus","nutritions":{"calories":43,"fat":0.2,"sugar":8.2,"carbohydrates":8.3,"protein":1.0}}

图片

4、HTTP/2

2015年,在对互联网性能进行多年观察和研究后,人们基于谷歌的 SPDY协议,提出并建立了 HTTP/2。

它与 HTTP/1.1有很多不同,包括将多个消息复用到单个 TCP数据包中、消息的二进制格式以及用于头部的 HPACK压缩。

在 HTTP/1.1中,两个请求不能共享同一个 TCP连接,必须等待第一个请求结束后才能开始后续请求。这被称为头部阻塞。在下面的图表中,由于只使用了一个 TCP连接,请求2必须等到响应1到达之后才能发送。

图片

HTTP/2通过流(stream)解决了这个问题,每个流对应一个消息。许多流可以交错在单个 TCP数据包中。如果某个流由于某种原因无法发送其数据,其他流可以在 TCP数据包中顶替它。

HTTP/2的流被分成帧(frame),每个帧包含:帧类型、它所属的流以及长度(以字节为单位)。在下面的图表中,彩色矩形是一个 TCP数据包,✉ 代表其中的一个 HTTP/2帧。第一个和第三个 TCP数据包携带了不同流的帧。

图片

下面的图像展示了帧如何放置在 TCP数据包中。流1携带了一个 JavaScript文件的 HTTP响应,而流2携带了一个 CSS文件的 HTTP响应。

图片

5、HTTP/3

HTTP/3诞生于一个名为 QUIC的新传输协议,该协议由谷歌于2012年创建。QUIC被封装在 UDP内,与 TCP相比,它有以下优点:

  • 建立连接和TLS身份验证的往返包数量更少;

  • 在处理数据包丢失方面具有更强的连接韧性;

  • 解决了TCP和TLS中存在的头部阻塞问题。

HTTP/2解决了 HTTP头部阻塞问题,但是,这个问题在 TCP和 TLS中也存在。TCP认为它需要发送的数据是一系列连续的数据包,如果有任何数据包丢失,必须重新发送,以保持信息的完整性。在 TCP中,直到丢失的数据包成功重新发送到目的地之前,后续的数据包都不能被发送。

下面的图示直观地解释了在 HTTP/2中这种情况是如何发生的。第二个数据包只包含了响应1的帧,但是它的丢失延迟了响应1和响应2,这意味着在这种情况下没有并行处理。

图片

为了解决 TCP的头部阻塞问题,QUIC决定使用 UDP作为传输协议,因为UDP不保证到达。在TCP中作为传输层的数据完整性责任被移至QUIC的应用层,消息的帧可以无序到达,而不会阻塞不相关的流。

图片

图片

与 TCP相关的 TLS(SSL)中的头部阻塞是因为加密通常应用于整个消息内容,这意味着需要接收所有数据之后才能进行解密。使用 QUIC时,加密是针对每个 QUIC数据包的,到达时就可以进行解密,而无需预先接收所有数据包。

带有 TLS的 TCP:

1. 输入:A+B+C

2. 加密:crypt(A+B+C) = D+E+F

3. 数据包:D, E, F

4. 接收:decrypt(D+E+F)

5. A+B+C

带有TLS的QUIC:

1. 输入:A+B+C

2. 加密:crypt(A) = X, crypt(B) = Y, crypt(C) = Z

3. 包:X, Y, Z

4. 接收:decrypt(X) + decrypt(Y) + decrypt(Z)

5. A+B+C

6、比较表

图片

* TLS 1.2需要2次往返进行加密握手,而 TLS 1.3只需要1次,还有 0-RTT(零往返时间恢复)选项,其中不需要先前的握手。然而,0-RTT会导致重放攻击,因此是不安全的。

** QUIC的连接 ID可能被用于指纹识别,一项研究指出,这存在对用户隐私的风险。

7、哪个版本最好?

目前最好的两个版本是 HTTP/2和 HTTP/3。

HTTP/3是为不稳定的连接设计的,例如手机和卫星网络。为了应对网络不稳定性,QUIC在数据流之间具有很高的独立性,并且在丢包时具有很好的弹性。然而,HTTP/3也存在性能损失,主要是因为1)由于 UDP的使用率较低,路由器和操作系统在过去几十年里没有对 UDP协议进行优化,使其相对于 TCP而言速度较慢;2)QUIC使用逐个数据包的加密需要更多的数学运算,效率低于 TCP中使用的整个消息加密。此外,UDP协议在某些网络中受到限制,以防止诸如  UDP洪水攻击和 DNS放大攻击等攻击。

在可靠和稳定的连接上,HTTP/2通常比 HTTP/3提供更好的性能。

一般来说,建议进行兼容性和性能测试,以确定哪个版本最合适。此外,服务器可以接受 HTTP/2和 HTTP/3连接,让客户端决定使用哪个版本。

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

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

相关文章

关于MS-DOS时代的回忆

目录 一、MS-DOS是什么&#xff1f; 二、MS-DOS的主要功能有哪些&#xff1f; 三、MS-DOS的怎么运行的&#xff1f; 四、微软开源MS-DOS源代码 五、高手与漂亮女同学 一、MS-DOS是什么&#xff1f; MS-DOS&#xff08;Microsoft Disk Operating System&#xff09;是微软公…

成功案例(IF=7.3)| 转录组+蛋白质组+代谢组联合分析分析揭示胰腺癌中TAM2相关的糖酵解和丙酮酸代谢重构

研究背景 肿瘤的进展和发展需要癌细胞的代谢重编程&#xff0c;癌细胞能量代谢模式的改变可以满足快速增殖和适应肿瘤微环境的需要。肿瘤微环境&#xff08;TME&#xff09;中的代谢状态受到多种因素的影响&#xff0c;包括血管生成、与其他细胞的相互作用和系统代谢。代谢异质…

桥接模式类图与代码

欲开发一个绘图软件&#xff0c;要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例&#xff0c;对应的绘图程序如表 7.7 所示。 根据绘图软件的扩展性要求&#xff0c;该绘图软件将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况&#xff0c;现采用桥接…

[Docker]容器的网络类型以及云计算

目录 知识梗概 1、常用命令2 2、容器的网络类型 3、云计算 4、云计算服务的几种主要模式 知识梗概 1、常用命令2 上一篇已经学了一些常用的命令&#xff0c;这里补充两个&#xff1a; 导出镜像文件&#xff1a;[rootdocker ~]# docker save -o nginx.tar nginx:laster 导…

基于SSM的农产品销售管理系统

文章目录 项目介绍一、项目功能介绍二、部分页面展示三、部分源码四、底部获取全部源码&#xff08;9.9&#xffe5;带走&#xff09; 项目介绍 农产品销售管理系统 一、项目功能介绍 一、介绍 系统分为两个角色 用户功能&#xff1a;登陆&#xff0c;注册&#xff0c;商品分…

实操专区-第11周-课堂练习专区-图的标记线和标记点

下载安装ECharts&#xff0c;完成如下样式图形。 代码和截图上传 完成 3.1.3.5 图的标记线和标记点 中的任务点 在一些折线图或柱状图当中&#xff0c;可以经常看到图中对最高值和最低值进行了标记。 在ECharts中&#xff0c;标记点&#xff08;markPoint&#xff09;常用于表示…

深入解析C#中的async和await关键字

文章目录 一、异步编程的基本概念及其在C#中的实现二、async关键字的定义及其用法三、await关键字的定义及其用法示例代码&#xff1a;使用async和await编写一个简单的异步程序 四、async和await的优点注意事项 五、C#下async和await中常见问题汇总1. 异步方法中的await调用2. …

森林消防泵:操作、购买攻略!/恒峰智慧科技

随着气候变化和人为活动的影响&#xff0c;森林火灾频繁发生&#xff0c;对生态环境和人类安全构成严重威胁。森林消防泵作为森林火灾扑救的重要设备&#xff0c;其性能和操作便捷性直接关系到灭火效果。本文将为您详细介绍森林消防泵的操作指南和购买攻略&#xff0c;助您更好…

【网站项目】戒烟网站

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【林业资质申报指南】申报林业工程调查规划设计丙级申报材料

【林业资质申报指南】申报林业工程调查规划设计丙级申报材料 申报林业工程调查规划设计丙级申报材料需要包括以下内容&#xff1a; 一、申报单位基本情况 申报单位应提供详细的单位介绍&#xff0c;包括单位名称、注册地址、法定代表人、注册资本、成立时间、经营范围等基本情况…

智慧校园的优势

数字化校园的建造给传统校园带来了生机与生机&#xff0c;数字化校园的每项设备都给学生带来了很好的体验。如不久前的开学季&#xff0c;许多校园运用校园一卡通体系&#xff0c;处理了往日人山人海的校园迎新现象&#xff0c;取而代之的是安静、有序的重生报到场景&#xff0…

Low Poly Animated Prehistoric Animals

该资源包与全球最优秀的古生物学家携手打造,以精确的形态和动画让史前动物栩栩如生。高质量上装束的低多边形动物,带有动画、惊艳的演示场景和漫游脚本:—内容— - 漫游脚本(V.4.5)可以将活的动物拖放到场景中 - 上装束的动物 - 优美的演示场景 - 支持 Mecanim - 20 种动物…

张大哥笔记:自媒体人10种赚钱方法

很多人都在做自媒体&#xff0c;比如平台广告分成、广告收入、公关宣传、品牌植入、演讲、会员制、出书、线下活动。那么本文介绍了自媒体人10种赚钱方法&#xff0c;供大家参考&#xff1a; 1、打造个人IP 什么是个人IP&#xff1f;在百度百科上是这样解释的&#xff1a;指个…

学术咸鱼入门指南(2)

巧用思维导图阅读文献 化整为零&#xff1a;读文献&#xff0c;从拆分文章的结构开始 大家在初步接触自己学科的论文时&#xff0c;要了解清楚基本的范式&#xff0c;日后读起来就比较顺了。 科研论文的第一部分&#xff0c;是文章的标题&#xff0c;摘要和关键词&#xff0…

机器学习之基于Python多种混合模型的糖尿病预测

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 糖尿病是一种慢性代谢性疾病&#xff0c;其发病率在全球范围内逐年上升&#xff0c;已成为影响人类健…

第11篇:创建Nios II工程之控制多个七段数码管

Q&#xff1a;DE2-115开发板上有8个七段数码管&#xff0c;如何用PIO IP并设计Nios II工程控制呢&#xff1f; A&#xff1a;基本思路&#xff1a;DE2-115上有8个7位七段数码管&#xff0c;而一个PIO最多可配置为32位&#xff0c;如此就可以添加2个PIO都配置为28位output。 Ni…

数据结构:环形链表的实战指南

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;http://t.csdnimg.cn/oHJAK&#xff08;数据结构与算法&#xff09; 小新的主页&#xff1a;编程版小新-CSDN博客 …

Jackson系统开发方法

1、Jackson分析方法是面向数据流的分析方法。这一方法从目标系统的输入、输出数据结构入手&#xff0c;导出程序框架结构&#xff0c;再补充其它细节&#xff0c;就可得到完整的程序结构图。 2、应用场景&#xff1a;这一方法对输入、输出数据结构明确的中小型系统特别有效&am…

人工智能实验:人脸检测

一、实现目的&#xff1a; 了解人脸检测的主要方法&#xff1b;了解 detectMultiScale 函数的功能及用法&#xff1b;掌握使用 OpenCV 提供的分类器和检测器进行人脸检测的方法。 二、实验设备&#xff1a; 计算机一台&#xff1b;视觉实验软件环境及资源一套&#xff08;vi…

明星中药企业系列洞察(一)丨官宣提价后股价涨幅近15%,百年老字号佛慈制药如何焕发力量?

近日&#xff0c;佛慈制药发布公告称&#xff0c;鉴于原材料以及生产成本上涨等原因&#xff0c;公司对主营中成药产品的出厂价进行调整&#xff0c;平均提价幅度为9%。提价消息释出后&#xff0c;资本市场给出了态度&#xff1a;佛慈制药股价连续两天累计上涨近15%。佛慈制药近…