热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从HTTP到HTTP3的发展简史

https:mp.weixin.qq.comsbwwuPof8Wy1qROGeeu6Vjg从HTTP到HTTP3的发展简史虽然HTTP3规范仍处于起草阶段,但最新版本的Chrome



https://mp.weixin.qq.com/s/bwwuPof8Wy1qROGeeu6Vjg


从 HTTP 到 HTTP/3 的发展简史

虽然 HTTP/3 规范仍处于起草阶段,但最新版本的 Chrome 浏览器已经默认支持它了。Chrome 拥有约 70%的浏览器市场份额,所以,可以说 HTTP/3 已经进入主流世界。

这一基础协议的最新修订版旨在


  • 让 Web 更加高效、
  • 安全并缩短内容交付延迟。
  • 从某些角度来说,它是 HTTP2 的完善:
    • 通过使用新的专用协议 QUIC 替换基础 TCP 协议 来解决和之前类似的目标。

想要弄明白 QUIC 的优点,最好的办法是讲清楚 TCP 作为 HTTP 请求的传输方式有哪些不足之处。

为此,我们将从头开始细细道来。


1. HTTP:起源

1991 年,当蒂姆·伯纳斯·李爵士设计出一个简单的


  • 单行超文本交换协议时,
  • TCP 已经是一个古老而可靠的协议了。
  • 前者的原始定义文档(也就是后人熟知的 HTTP 0.9)特别提到 TCP 是首选的(尽管并非唯一的)传输协议:

注意:HTTP 当前运行在 TCP 上,但也可以运行在任何 面向连接的服务上。


当然,HTTP 的这个概念验证版本与我们 现在所知道和喜欢的 HTTP 几乎没有相似之处。


  • 没有标头,也没有状态码。
  • 典型的请求只有GET/path而已。响应仅包含 HTML,且 TCP 连接关闭就会结束。

由于浏览器尚未流行,因此用户需要直接阅读 HTML。

可以用它链接到其他资源,但是在这个 HTML 早期版本中存在的所有标签都不会异步请求其他资源。

一个 HTTP 请求就传递了一个完整的、自给自足的页面。


2. HTTP/1.0 出现

在随后几年中,互联网迎来爆炸式的发展,尽管传输 HTML 仍然是 HTTP 的主要特色,但它逐渐发展成一种可扩展且灵活的通用协议。HTTP 的三大重要更新奠定了这一演变的基础:


  • 方法的引入 使客户能 确定其 想要执行操作的类型。
    • 例如,引入 POST 是为了允许客户端将数据发送到服务器以处理和存储;
  • 状态码为客户端提供了一种 确认服务器已成功处理请求的方法
    • ——如果处理失败,则可以用它了解发生了哪种错误;
  • 标头增加了 将结构化文本 元数据附加到 可以修改 客户端或服务器 行为的 请求和响应 上的功能。
    • 例如,编码和内容类型头使 HTTP 不仅可以传输 HTML,还可以传输任何类型的负载。
    • “压缩”标头允许客户端和服务器协商支持的压缩格式,从而减少了通过连接传输的数据量。

同时,HTML 也不断进化,支持了图像、样式和其他链接资源。

现在,浏览器需要执行多个请求来显示一个网页,而原始的“按请求连接”架构是做不到的。


  • 建立和终止 TCP 连接涉及大量的数据包来回交换,因此在延迟开销方面相对昂贵。
  • 网页不见得一定由单个文本文件组成,但是随着每页请求数量的增加,延迟也随之增加。

下图说明了每建立一个新的 TCP 连接涉及多少请求开销。

img

TCP 连接需要三个请求才能建立连接,四个请求可以完全关闭

人们创建了一个“连接”标头来解决这个问题。


  • 客户端发送带有“connection:keep-alive”标头的请求,
  • 以表明意图为后续请求保持 TCP 连接的打开状态。
  • 如果服务器理解此标头并同意遵守该标头,
  • 则其响应还将包含“connection:keep-alive”标头。

这样,双方都保持 TCP 通道打开并使用它进行后续通信,直到任何一方决定关闭它为止。

随着 SSL/TLS 加密技术的发展,这一点变得更加重要,


  • 因为协商加密算法和交换加密密钥需要在每个连接上增加一个请求 / 响应周期。

img

单个 TCP 连接可以通过“connection:keep-alive”标头重用于多个请求

当时,许多 HTTP 改进都是自发出现的。当流行的浏览器或服务器应用程序需要新的 HTTP 功能时,它们会自己实现该功能,并希望其他各方也能效仿。具有讽刺意味的是,去中心化的 Web 需要一个中心化的管理机构来避免碎片化造成的不兼容问题。

该协议的最初创建者蒂姆·伯纳斯·李(TimBerners-Lee)意识到了这种危险,并于 1994 年成立了万维网联盟(W3C),该联盟与互联网工程任务组(IETF)一起致力于规范互联网的技术栈。作为为已有环境带来更多规范的第一步,他们记录了当时 HTTP 中最常用的一些功能,并将其命名为 HTTP/1.0 协议。

但是,由于这种“规范”描述的是多种多样的,通常在“实践”中用法不一致的技术,因此它从未获得过标准地位。相比之下,关于 HTTP 协议新版本的工作已经开始了。


  • 学不动了,自己看原文吧
    https://mp.weixin.qq.com/s/bwwuPof8Wy1qROGeeu6Vjg

3. HTTP/1.1 的标准化

HTTP/1.1 修复了 HTTP/1.0 的不一致之处,并调整了协议,使其在新的 Web 生态系统中具备更好的性能表现。新版引入的两个最关键的更改是默认使用持久 TCP 连接(保持活动状态)和 HTTP 管线化。



推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
author-avatar
国民男神-权志龙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有