详解HTTP1.0、1.1、2.0版本区别/优化

这篇具有很好参考价值的文章主要介绍了详解HTTP1.0、1.1、2.0版本区别/优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、HTTP 1.0
  • 是一种无状态,无连接的应用层协议
    • 规定浏览器和服务器保持短暂的链接。
    • 浏览器每次请求都需要与服务器建立一个TCP连接,服务器处理完成以后立即断开TCP连接(短连接),服务器不跟踪也每个客户单,也不记录过去的请求(无状态)。
    • 这种无状态性可以借助cookie/session机制来做身份认证和状态记录
  • 存在的问题:
    • 无法复用连接:每次发送请求/返回响应,都需要进行一次TCP连接,而TCP的连接释放过程又是比较费事的。这种无连接的特性会使得网络的利用率变低。
    • 队头阻塞(head of line blocking):由于HTTP1.0规定下一个请求必须在前一个请求响应到达之后才能发送,假设前一个请求响应一直不到达,那么下一个请求就不发送,后面的请求就阻塞了。

Http 1.0的致命缺点:

  1. 无法复用TCP连接和并行发送请求,这样每次一个请求都需要三次握手,而且其实建立连接和释放连接的这个过程是最耗时的,传输数据相反却不那么耗时。

  2. 不支持文件断点续传。

  3. 本地时间被修改导致响应头expires的缓存机制失效的问题。


2、HTTP1.1

HTTP1.1继承了HTTP1.0的简单,克服了HTTP1.0性能上的问题。
HTTP1.1也是当前使用最为广泛的HTTP协议

  • 1. 长连接:HTTP1.1增加Connection字段,通过设置Keep-Alive保持HTTP连接不断开,直到连接的某一段主动提出断开连接的请求(Connection:Close)。避免每次客户端与服务器请求都要重复建立释放建立TCP连接。提高了网络的利用率。如果客户端想关闭HTTP连接,可以在请求头中携带Connection:Close来告知服务器关闭请求。
  • 2. 管道化:HTTP1.1支持请求管道化(pipelining)。基于HTTP1.1的长连接,使得请求管线化成为可能。 管线化使得请求能够“并行”传输。但需要注意的是:服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户端能够区分出每次请求的响应内容。
    • 也就是说,HTTP管道化可以让我们把先进先出队列从客户端(请求队列)迁移到服务端(响应队列),如果,客户端同时发了两个请求分别获取html和css,假如说服务器的css资源先准备就绪,服务器也会先发送html,再发送css。 换句话来说,只有等到html响应的资源完全传输完毕后,css响应的资源才开始传输,不允许同时存在两个并行的响应。
    • 可见,HTTP1.1还是无法解决队头阻塞(head of line blocking)的问题,只是把先进先出队列从客户端(请求队列)迁移到服务端(响应队列)。
  • 3. RANGE:bytes字段: 是HTTP/1.1新增内容,断点续传,表示要求服务器从文件XXXX字节处开始传送。
  • 4. 真并行传输 — 浏览器优化策略
    • HTTP1.1支持管道化,但是服务器也必须进行逐个响应的送回,这个是很大的一个缺陷。实际上,现阶段的浏览器厂商采取了另外一种做法,它允许我们打开多个TCP的会话,也就是说,其实是不同的TCP连接上的HTTP请求和相应,这也就是我们所熟悉的浏览器对同域下并行加载6~8个资源的限制。
  • 5. 缓存处理 — 强缓存、协商缓存,启发式缓存(新增)
    • 此外,HTTP1.1还加入了缓存处理(强缓存和协商缓存),新的字段如cache-control,支持断点传输,以及增加了Host字段(使得一个服务器能够用来创建多个Web站点)

Http 1.1的致命缺点:

  • 1.明文传输。
  • 2.其实还是没有解决无状态连接的。
  • 3.当有多个请求同时被挂起的时候 就会拥塞请求通道,导致后面请求无法发送(没有真正的解决队头阻塞)。
  • 4.臃肿的消息首部:HTTP/1.1能压缩请求内容,但是消息首部不能压缩;在现今请求中,**消息首部占请求绝大部分(**甚至是全部)也较为常见。

我们也可以用dns-prefetch和 preconnect tcp来优化~

<link rel="preconnect" href="//example.com" crossorigin>
<link rel="dns=prefetch" href="//example.com">
  • Tip: webpack可以做任何事情,这些都可以用插件实现

3、HTTP2.0

相较于HTTP1.1,HTTP2.0的主要优点有:

  1. 采用二进制帧封装
  2. 传输变成多路复用
  3. 流量控制算法优化
  4. 服务器端推送
  5. 首部压缩
  6. 优先级

1、 二进制帧封装 / 二进制分帧

HTTP1.x的解析是基于文本的,基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多。

HTTP2.0会将所有传输的信息分割为更小的消息和帧,然后采用二进制的格式进行编码HTTP1.x的头部信息会被封装到HEADER frame(单独成帧,不再在后续数据传输中携带),而相应的RequestBody则封装到DATAframe里面

不改动HTTP的语义,使用二进制编码,实现方便且健壮。

2、 多路复用 && 优先级

所有的请求都是通过一个 TCP 连接并发完成。

HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求

同时,流还支持优先级和流量控制。当流并发时,就会涉及到流的优先级和依赖

即:HTTP2.0对于同一域名下所有请求都是基于流的,不管对于同一域名访问多少文件,也只建立一路连接。优先级高的流会被优先发送和响应。图片请求的优先级要低于 CSS 和 SCRIPT,这个设计可以确保重要的东西可以被优先加载完(相较HTTP1.1,响应不再死板的按照请求顺序返回,而是根据流中请求数据的优先级响应)。

3、 流量控制

TCP协议通过sliding window(滑动窗口)的算法来做流量控制。

发送方有个sending window,接收方有receive window。http2.0的flow control是类似receive window的做法数据的接收方通过告知对方自己的flow window大小表明自己还能接收多少数据。

只有Data类型的frame才有flow control的功能。对于flow control,如果接收方在flow window为零的情况下依然更多的frame,则会返回block类型的frame,这种场景一般表明http2.0的部署出了问题。

4、 服务器端推送

服务端推送是一种在客户端请求之前发送数据的机制。可以做到(客户端的)缓存。

服务器端的推送,就是服务器可以对一个客户端请求发送多个响应

除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。 当浏览器请求一个html,服务器其实大概知道你是接下来要请求资源了,而不需要等待浏览器得到html后解析页面再发送资源请求。

5、 首部压缩

  1. HTTP 2.0 在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送;

    通信期间几乎不会改变的通用键-值对(用户代理、可接受的媒体类型,等等)只需发送一次。事实上,如果请求中不包含首部(例如对同一资源的轮询请求),那么 首部开销就是零字节。此时所有首部都自动使用之前请求发送的首部。

  2. 如果首部发生变化了,那么只需要发送变化了数据在Headers帧里面新增或修改的首部帧会被追加到“首部表”首部表在 HTTP 2.0 的连接存续期内始终存在,由客户端和服务器共同渐进地更新

  3. 本质上是为了减少请求,通过多个js或css合并成一个文件,多张小图片拼合成Sprite图,可以让多个HTTP请求减少为一个,减少额外的协议开销,而提升性能。

    当然,一个HTTP的请求的body太大也是不合理的,有个度。文件的合并也会牺牲模块化和缓存粒度,可以把“稳定”的代码or 小图 合并为一个文件or一张Sprite,让其充分地缓存起来,从而区分开迭代快的文件。

    HTTP/1.1并不支持 HTTP 首部压缩,为此 SPDY 和 HTTP/2 应运而生, SPDY 使用的是通用的DEFLATE 算法,而 HTTP/2 则使用了专门为首部压缩而设计的 HPACK 算法。文章来源地址https://www.toymoban.com/news/detail-402129.html

到了这里,关于详解HTTP1.0、1.1、2.0版本区别/优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web前端面试-- http的各个版本的区别(HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0)

    本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-) web面试题专栏:点击此处 HTTP(超文本传输协议)是用于在网络上传输和接收超文本的协议。HTTP的各个版本有以下区别: HTTP/0.9 :这是最早的版本,

    2024年02月07日
    浏览(40)
  • Http 1.0 1.1 2.0 3.0 版本差别

    发布年份:1996 非官方标准 短链接:每一次请求都对应一次TCP的连接与释放 开销大:每次请求都要TCP的连接与释放 队头阻塞:每次请求都必须等上一次请求获得响应之后,才可以发送;效率低下 缓存:在HTTP1.0中主要使用header里的协商缓存 last-modified(上次修改时间),if-

    2024年02月10日
    浏览(44)
  • 【HTTP版本】HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0等重点知识汇总

    目录 HTTP/1.1 的优点有哪些? HTTP/1.1 的缺点有哪些? HTTP 1.0,1.1,2.0,3.0 的主要区别 HTTP/1.1 相比 HTTP/1.0 提高了什么性能? HTTP/2 做了什么优化? HTTP/3 做了哪些优化? HTTP 最突出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。 1. 简单 HTTP 基本的报文格式就是 head

    2024年02月07日
    浏览(39)
  • http1.0、http1.1 http 2.0

    HTTP/1.0是无状态、无连接的应用层协议。 无连接:每次请求都要建立连接,需要使用 keep-alive 参数建立长连接、HTTP1.1默认长连接keep-alive   无法复用连接,每次发送请求都要进行TCP连接,TCP的连接释放都比较费事,会导致网络利用率低 队头阻塞 队头阻塞(head of line blocking),

    2024年02月16日
    浏览(36)
  • HTTP1.0、HTTP1.1、HTTP2.0 协议的区别

    HTTP 1.1相比HTTP 1.0具有以下优点: 1. 持久连接 :HTTP 1.1引入了持久连接机制,允许多个请求和响应复用同一个TCP连接。这样可以减少建立和关闭连接的开销,提高性能和效率。 2. 流水线处理 :HTTP 1.1支持流水线处理,即可以同时发送多个请求,不需要等待前一个请求的响应。

    2024年02月05日
    浏览(51)
  • HTTP1.0和HTTP1.1和HTTP2.0的主要区别

    先上结论,面试常问,同时也是我们学习HTTP协议所必须了解的一些新机制,我们往往学习的都是HTTP1.0的一些基础,1.1 2.0也是企业中常用的东西,也优化了很多nb的属性,下面我们简单来了解下! HTTP 是基于TCP/IP协议的,每一次 建立或者断开连接 都需要三次握手四次挥手的 开销

    2023年04月17日
    浏览(53)
  • http1.0,http1.1,http2.0,http3.0 区别有哪些

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

    2024年02月08日
    浏览(48)
  • Http1和Http2的区别

    一、HTTP1和HTTP2的区别 1.新的二进制格式:HTTP2采用二进制格式而HTTP1使用文本格式。 2.多路复用:HTTP2是完全多复用的,而非有序并阻塞的,只需一个连接即可实现并行。HTTP1一个连接只能发送一个请求。 3.首部压缩:HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2

    2024年02月16日
    浏览(34)
  • 了解HTTP/1.1、HTTP/1.0 和 HTTP/2.0

    HTTP/1.1、HTTP/1.0 和 HTTP/2.0 是超文本传输协议(HTTP)的三个主要版本 先解释一下什么是超文本协议 超文本传输协议(HyperText Transfer Protocol,简称 HTTP)是互联网上应用最广泛的一种网络协议。设计 HTTP 的初衷是为了允许浏览器从服务器获取(或向服务器提交)网页数据,从而

    2024年01月25日
    浏览(36)
  • 关于HTTP、HTTPS、HTTP1.1、HTTP2.0、HTTP3.0的介绍及区别

    一、HTTP的简介        HTTP(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的www文件都必须遵循这个标准。设计初衷是为了提供一种发布和接收HTML页面的方法。 二、HT

    2024年02月01日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包