首页 > 其他分享 >HTTP的发展历史

HTTP的发展历史

时间:2022-11-07 13:46:12浏览次数:72  
标签:历史 发展 请求 pipeline TCP 响应 HTTP 1.1

互联网的始祖-阿帕网

1968 年6月3日,罗伯茨向泰勒描述了建立阿帕网的计划,18 天后,也就是 6 月 21 日,泰勒批准了这个计划,14 个月后阿帕网建立。

1973 年 ARPA 网扩展成互联网,第一批接入的有英国和挪威计算机,逐渐地成为网络连接的骨干。

1974 年 ARPA 的罗伯特·卡恩和斯坦福的文顿·瑟夫提出TCP/IP 协议。

1986 年,美国国家科学基金会(National Science Foundation,NSF)建立了大学之间互联的骨干网络 NSFNET ,这是互联网历史上重要的一步,NSF网成为新的骨干,1990 年 ARPA网退役。

万维网(World Wide Web)

  • URI,统一资源标识符,作为互联网上的唯一标识。

  • HTML,超文本标记语言,描述超文本。

  • HTTP ,超文本传输协议,传输超文本。

HTTP各大版本的演进

  1. HTTP/0.9

    在 1990 年 ,蒂姆·伯纳斯-李创建了运行万维网所需的所有工具,其中包括HTTP。那时候是互联网初期,计算机的处理能力包括网速等等都很弱,所以 HTTP 也逃脱不了那个时代的约束,因此设计的非常简单,而且也是纯文本格式。

    因此只有 “GET”,也不需要啥请求头,并且拿完了就结束了,因此请求响应之后连接就断了。这时候的 HTTP 还没有版本号的,之所以称之为 HTTP / 0.9 是后人加上去了,为了区别之后的版本。

    图片

     

  2. HTTP/1.0

    随着图像和音频的发展,1995年Apache诞生(HTTP 服务器),浏览器也在不断的进步予以支持,这也促进了 HTTP 协议的修改。为了添加各种特性来满足用户的需求, 于 1996 年正式发布。

    增加了以下几点:

    • 增加了 HEAD、POST 等新方法。

    • 增加了响应状态码。

    • 引入了头部,即请求头和响应头。

    • 在请求中加入了 HTTP 版本号。

    • 引入了 Content-Type ,使得传输的数据不再限于文本。

     

  3. HTTP/1.1

    从 1995 年至 1999 年间的第一次浏览器大战,极大的推动了 Web 的发展。主要是因为 HTTP/1.0 很大的性能问题,就是每请求一个资源都得新建一个 TCP 连接,而且只能串行请求

    增加了以下几点:

    • 新增持久连接keep-alive,目的是复用TCP连接

    • 支持 pipeline,无需等待前面的请求响应,即可发送第二次请求

    • 允许响应数据分块(chunked),即响应的时候不标明Content-Length,客户端就无法断开连接,直到收到服务端的 EOF ,利于传输大文件。

    • 新增缓存的控制和管理。

    • 加入了 Host 头,用在你一台机子部署了多个主机,然后多个域名解析又是同一个 IP,此时加入了 Host 头就可以判断你到底是要访问哪个主机。

    图片

    HTTP/1.1存在的问题

    总结主要有以下两点

    • 头阻塞:HTTP/1.1中只有收到当前请求响应后才能重用当前tcp连接发送下一次请求。虽然HTTP/1.1提出了pipeline,旨在缓解这个问题。但是一方面pipeline在复杂的网络环境下很难实现和普及,其次就算都用上了pipeline,pipeline也只是使得可以在本次响应完成之前可以发送下次请求,但响应依然要严格按照顺序返回,也就是如果前一个响应被阻塞,后边的响应将不会到来,头阻塞问题还是没有完全解决。目前客户端(比如浏览器)一般会同时打开多个tcp连接来绕开头阻塞的问题,chrome默认会打开6个tcp链接,并发请求各种类型数据。但是这就带来了一个矛盾,tcp链接越多,肯定对资源的浪费是越大的,链接越少,头阻塞的问题就会越突出。

    • 重复的未压缩头数据的传输:自HTTP/1.1之后,HTTP请求中通常带有大量ASCII编码的头部,这些头部通常大部分不会变化,需要每次请求都携带(尤其像是User Agent、Cookie这些值比较长的头部字段),会给本来就拥挤的网络带来很大的压力。

    除此之外还有一些问题,比如TCP 的慢启动,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度,而大量http的业务请求其实本身都只是短链接的,所以导致tcp的流量控制算法没有很好的应用。为此,HTTP/2的出现就很有必要了。

     

  4. HTTP/2.0

    随着 HTTP/1.1 的发布,互联网也开始了爆发式的增长,这种增长暴露出 HTTP 的不足,主要还是性能问题,而 HTTP/1.1 无动于衷。互联网标准化组织以 Google 推出的SPDY 协议为基础开始制定新版本的 HTTP 协议,最终在 2015 年发布了 HTTP/2。

    增加了以下几点:

    • 二进制协议,不再是纯文本。(解析数据开销更小,减少了网络延迟,提升了整体的吞吐量)

    • 支持一个 TCP 连接发起多请求,即支持多路复用,移除了 pipeline。(HTTP/1.1 pipeline 还是有阻塞的情况,需要等前面的一个响应返回了后面的才能返回。)

    • 利用 HPACK 压缩头部(减少数据传输量。)

    • 允许服务端主动推送数据。(其实就是减少了请求的次数)

    HTTP/2 引入了一个新的二进制分帧层,该层无法与之前的 HTTP/1.x 服务器和客户端兼容,HTTP/2的新特性都是建立在这个二进制分帧层基础之上的。

    img

     

  5. HTTP/3.0

    这次的痛点来自于 HTTP 依赖的是可靠的、有序的,具有失败重传和按序机制的传输协议 TCP。

    依赖TCP存在的问题:

    1. HTTP/2 是所有流共享一个 TCP 连接,所以会有 TCP 层面的队头阻塞,当发生重传时会影响多个请求响应;

    2. TCP 是基于四元组(源IP,源端口,目标IP,目标端口)来确定连接的,而在移动网络的情况下 IP 地址会频繁的换,这会导致反复的建连;

    3. TCP 与 TLS 的叠加握手,增加了延时

    因此 Google 把 TCP 可靠、有序、丢包重传和拥塞控制功能提到应用层来实现,就研究出了基于 UDP 的 QUIC 协议。在 2018 年,互联网标准化组织 IETF 提议将 HTTP over QUIC 更名为 HTTP/3 并获得批准。

    增加了以下几点:

    • 基于UDP,并把 TCP 可靠、有序、丢包重传和拥塞控制功能提到应用层来实现;

    • 引入了个叫 Connection ID 来标识一个链接,所以切换网络之后可以复用这个连接,达到 0 RTT 就能开始传输。

    • 开发了QPACK 压缩头部,也采用了静态表、动态表和哈夫曼编码。(因为无法使用依赖TCP的HPACK)

标签:历史,发展,请求,pipeline,TCP,响应,HTTP,1.1
From: https://www.cnblogs.com/road2master/p/16865658.html

相关文章

  • Nginx configure error: the HTTP rewrite module requires the PCRE library
    IssueWhen configure nginx1.19.0,runthecommands../configure--prefix=/opt/nginx-1.19.0CopyButthefollowingerror occurs.checkingforPCRElibr......
  • Nginx1.8.1 编译扩展https
    nginx无缝编译扩展https本贴只限用于通过编译安装的nginx,如果用的是yum源安装请卸载后参见 安装nginx部分。一、重新编译nginx1、查看nginx是否支持ssl/usr/local/nginx/sb......
  • HTTP常用返回结果状态码
    摘编自《图解HTTP》HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。状态码的职责是当客户端向服务器端发送请求时,描......
  • 为什么需要http代理
    它的主要作用便是安全的保护用户,它主要工作在开放系统互联(OSI)模型的对话层,起到防火墙的作用。大部分的代理服务器会被用来连接NTERNET(国际互联网)和INTRANET(局域网)。......
  • git学习之通俗易懂篇(九)【查看历史版本的各种方式】
    1、gitlog--oneline   【在一行上展示每一次提交】看得更清楚些~2、gitlog--oneline--graph   【看到变化过程】tips:(1)如果commit的次数比较多,就会......
  • 报告分享|腾讯金融研究院:2022金融AI发展研究报告
    报告链接:http://tecdat.cn/?p=29995报告出处:拓端数据公众号人工智能作为一种“新基建”,正在与实体经济深度融合,推动社会及各个产业的数字化转型、智能升级和融合创新。金......
  • 编写一个Httpclient调用第三方接口
    什么是httpClientHttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版......
  • web基础与http协议
    一、HTML1.1、html概述HTML叫做超文本标记语言,是一种规范,也是一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加......
  • https://github.com/aimeos/aimeos-laravel 安装
    需要的安装环境Linux/Unix、WAMP/XAMP或MacOS环境PHP>=7.3(Aimeos2021.10),PHP>=8.0(Aimeos2022.04+)MySQL>=5.7.8,MariaDB>=10.2.2,PostgreSQL9.6+,SQL......
  • 智能制造如何帮助企业发展?
    智能制造主要在两方面来帮助企业发展,一是提供先进的工业制造技术如先进装备、先进材料和先进工艺等来提升制造硬实力,适当采用“机器换人”,提高制造的智能化自动化水平,尽可......