计算机网络_HTTP1.0、HTTP1.1和HTTP2.0的区别

2023-11-08 08:10

本文主要是介绍计算机网络_HTTP1.0、HTTP1.1和HTTP2.0的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以铜为镜可以正衣冠,以史为镜可以明得失,以文为镜可以修内功,本系列我们来说说计算机网络,修修内功以识这巨大的“网”。

目录

    • 一、为什么要了解
    • 二、HTTP网络请求过程
    • 三、HTTP1.0 vs HTTP1.1
    • 四、HTTP1.1 vs HTTP2.0
    • 五、总结

一、为什么要了解

了解不同版本HTTP协议,实际上是了解Web的发展历史,了解历史让我们对于技术的发展方向有迹可循。

  • HTTP1.0对应早期阶段,互联网上的资源以展示为主,用户只能获取文字和图片;
  • HTTP1.1对应中期阶段,是现在的主流版本,互联网上的资源变得更加丰富,还出现了Ajax技术,用户能进行更复杂的交互,获取更丰富的资源(例如:css、js、视频等);
  • HTTP2.0对应后期阶段,我们的页面还可以运行在手机浏览器中,在同样富交互和资源的基础上,手机浏览器有着更复杂的网络情况,用户需要更好的体验,因此需要对HTTP深入理解不断优化。

二、HTTP网络请求过程

浏览器和服务器通过HTTP相互通信,组成了万维网的基本组件,下图显示了简化版的HTTP网络请求过程。
HTTP网络请求过程

可以看到,简化版HTTP网络请求过程分为4步:

  1. DNS解析:浏览器查询域名服务器上的映射表,解析出域名映射的IP;
  2. TCP连接:浏览器与IP对应资源服务器上的应用程序建立TCP连接;
  3. HTTP请求:浏览器发送HTTP请求
  4. HTTP响应:资源服务器返回HTTP响应

影响一个HTTP网络请求的因素主要有两个:带宽和延迟。前者属于外部因素,现在网络基础建设已经使得带宽极大提升,无需再担心;后者属于内部因素,步骤(1)、(2)处于HTTP请求前,会延迟HTTP请求的发送,步骤(3)、(4)处于HTTP请求中,浏览器阻塞、处理速度均会限制后续请求。因此,HTTP协议的迭代对带宽、延迟进行了优化。

三、HTTP1.0 vs HTTP1.1

HTTP1.0是第一个得到广泛使用的HTTP版本,当时用于简单的网页和网络请求上,HTTP1.1是当前使用最广泛的HTTP版本,主要区别在于:

通用性:

  • Host头处理。HTTP1.0中,认为每台服务器绑定唯一IP地址,请求的URL并无主机名;HTTP1.1中,请求和响应头中均应携带Host字段,因为虚拟主机技术的发展,使得一台物理机可以存在多个虚拟主机,共享IP地址
  • 错误处理。HTTP1.1中,新增了24个错误状态码,如409(Conflict)表示请求可能在资源上引发的一些冲突;410(Gone)表示服务器无法找到所请求的资源,但该资源服务器曾经拥有过。

带宽问题:

  • 带宽优化。HTTP1.0中,当客户端只需要对象的一部分,服务器会将整个对象返回,存在浪费带宽的现象;HTTP1.1中,在请求头中引入了range字段,允许只请求资源的一部分,此时返回码为206(Patial Content),在充分利用带宽的同时,支持了断点续传功能。

延迟问题:

  • 长连接。HTTP1.0中,每次请求都需要创建连接。HTTP1.1中,支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的延迟,且HTTP1.1默认开启Connection:keep-alive。
  • 缓存策略。HTTP1.0中,主要使用请求头中的If-Modified-Since,Expires作为缓存判断的标准;HTTP1.1中,引入了更多的缓存控制策略,例如:Entitytag,If-Unmoidfied-Since,If-Match,If-None-Match等。

四、HTTP1.1 vs HTTP2.0

HTTP1.1是当前使用最广泛的HTTP版本,HTTP2.0是HTTP1.1后续结构的原型建议,重点关注性能的大幅度优化,主要区别在于:

通用性:

  • 二进制格式。HTTP1.1中,解析是基于文本,文本的表现形式有多样性,协议的健壮性考虑不足;HTTP2.0中,解析基于二进制,实现方便且健壮。
  • 服务端推送。HTTP1.1中,没有服务端推送功能;HTTP2.0中,当浏览器收到a.css数据同时,服务端会将a.js文件推送给浏览器,浏览器再次尝试获取a.js时,可从缓存中直接获取。

带宽问题:

  • header压缩。HTTP1.1中,请求和响应头中有大量的信息,每次都需重复发送;HTTP2.0中,使用encoder减少请求/响应头大小,通信双方缓存一份头字段表,减少了需要传输的大小,节省了带宽。

延迟问题:

  • 多路复用。HTTP1.1中,支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会;HTTP2.0中,支持多路复用(MultiPlexing),多个请求可同时在一个连接上并行执行(由于支持二进制的格式,可以无序)某个请求任务耗时严重,不会影响到其它连接的正常执行,接收方根据id将数据归属到不同的请求中。

五、总结

本文首先说明了学习不同版本HTTP协议有助于把握技术发展的方向;其次从简化版的HTTP网络请求入手,介绍了各个环节对请求的影响,提出了影响网络请求的两个因素——带宽和延迟;然后分别将HTTP1.0、HTTP1.1、HTTP2.0进行对比:HTTP1.0是第一个得到广泛使用的HTTP版本,当时用于简单的网页和网络请求上,HTTP1.1是当前使用最广泛的HTTP版本,HTTP2.0是HTTP1.1后续结构的原型建议,后者在前者的基础上均进行了通用性、带宽问题、延迟问题上的优化,HTTP1.1的核心变化是支持了长连接和断点续传,HTTP2.0的核心变化是支持header压缩和多路复用。

这篇关于计算机网络_HTTP1.0、HTTP1.1和HTTP2.0的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/368761

相关文章

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

分辨率三兄弟LPI、DPI 和 PPI有什么区别? 搞清分辨率的那些事儿

《分辨率三兄弟LPI、DPI和PPI有什么区别?搞清分辨率的那些事儿》分辨率这个东西,真的是让人又爱又恨,为了搞清楚它,我可是翻阅了不少资料,最后发现“小7的背包”的解释最让我茅塞顿开,于是,我... 在谈到分辨率时,我们经常会遇到三个相似的缩写:PPI、DPI 和 LPI。虽然它们看起来差不多,但实际应用

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使