HTTP1.0、HTTP1.1 和 HTTP2.0 的区别

一、HTTP的历史

早在 HTTP 建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的 web 服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了 WEB2.0 以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的 HTML 页面有了 CSS,Javascript,来丰富我们的页面展示,当 ajax 的出现,我们又多了一种向服务器端获取数据的方法,这些其实都是基于 HTTP 协议的。同样到了移动互联网时代,我们页面可以跑在手机端浏览器里面,但是和 PC 相比,手机端的网络情况更加复杂,这使得我们开始了不得不对 HTTP 进行深入理解并不断优化过程中。
在这里插入图片描述

二、HTTP的基本优化

影响一个 HTTP 网络请求的因素主要有两个:带宽和延迟。

  • 带宽:如果说我们还停留在拨号上网的阶段,带宽可能会成为一个比较严重影响请求的问题,但是现在网络基础建设已经使得带宽得到极大的提升,我们不再会担心由带宽而影响网速,那么就只剩下延迟了。
  • 延迟
    (1)、浏览器阻塞(HOL blocking):浏览器会因为一些原因阻塞请求。浏览器对于同一个域名,同时只能有 4 个连接(这个根据浏览器内核不同可能会有所差异),超过浏览器最大连接数限制,后续请求就会被阻塞。
    (2)、DNS 查询(DNS Lookup):浏览器需要知道目标服务器的 IP 才能建立连接。将域名解析为 IP 的这个系统就是 DNS。这个通常可以利用DNS缓存结果来达到减少这个时间的目的。
    (3)、建立连接(Initial connection):HTTP 是基于 TCP 协议的,浏览器最快也要在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。

三、HTTP1.0、HTTP1.x、HTTP2和HTTPS梳理

HTTP1.x
  • 线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞
HTTP1.0
  • 缺陷:浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接(TCP连接的新建成本很高,因为需要客户端和服务器三次握手),服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求;
  • 解决方案:
    添加头信息——非标准的Connection字段Connection: keep-alive
HTTP1.1
  • 持久连接:
    1、引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive(对于同一个域名,大多数浏览器允许同时建立6个持久连接)

  • 管道机制:
    1、即在同一个TCP连接里面,客户端可以同时发送多个请求。

  • 分块传输编码:
    1、即服务端没产生一块数据,就发送一块,采用”流模式”而取代”缓存模式”。

  • 新增请求方式:
    1、PUT:请求服务器存储一个资源;
    2、DELETE:请求服务器删除标识的资源;
    3、OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;
    4、TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断;
    5、CONNECT:保留将来使用

  • 缺点:
    1、虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“队头堵塞”
    2、避免方式:一是减少请求数,二是同时多开持久连接

HTTP/2.0

优点

采用二进制格式而非文本格式;
完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行;
使用报头压缩,降低开销
服务器推送

二进制协议
1、HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为”帧”:头信息帧和数据帧。

2、二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。

完全多路复用

1、HTTP/2 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”。

报头压缩

1、HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如Cookie,一样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。
对于相同的头部,不必再通过请求发送,只需发送一次;
2、HTTP/2 对这一点做了优化,引入了头信息压缩机制;
3、一方面,头信息使用gzip或compress压缩后再发送;
4、另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。

服务器推送

1、HTTP/2 允许服务器未经请求,主动向客户端发送资源;
2、通过推送那些服务器任务客户端将会需要的内容到客户端的缓存中,避免往返的延迟

HTTPS
  • HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS.
  • HTTPS主要作用:
    1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
    2)对网站服务器进行真实身份认证。

HTTPS加密方式

  • 对称加密:加密和解密都是使用的同一个密钥;

  • 非对称加密:
    1)、加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥;
    2)、公钥和算法都是公开的,私钥是保密的。
    3)、非对称加密过程:
    🐥服务端生成配对的公钥和私钥,
    🐥私钥保存在服务端,公钥发送给客户端,
    🐥客户端使用公钥加密明文传输给服务端,
    🐥服务端使用私钥解密密文得到明文

  • 数字签名:
    🐥 签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过。
    🐥验证传输的内容是对方发送的数据

四、HTTPS和HTTP的区别

HTTPS和HTTP的区别:
     1)HTTPS是加密传输协议,HTTP是名文传输协议;
     HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
      2)HTTPS需要用到SSL证书,而HTTP不用;HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
      3)HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,
      4)HTTPS标准端口443,HTTP标准端口80;
      5)HTTPS基于传输层,HTTP基于应用层;
      6)HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
HTTPS和HTTP的工作过程区别:
   HTTP 包含动作:
			🤣浏览器打开一个 TCP 连接
			🤣浏览器发送 HTTP 请求到服务器端
			🤣服务器发送 HTTP 回应信息到浏览器
			🤣TCP 连接关闭
	SSL 包含动作:
	          🐣验证服务器端
	          🐣客户端和服务器端选择加密算法和密码,确保双方都支持
	          🐣验证客户端(可选)
	          🐣使用公钥加密技术来生成共享加密数据
	          🐣创建一个加密的 SSL 连接
	          🐣基于该 SSL 连接传递 HTTP 请求

在这里插入图片描述

五、HTTP1.0和HTTP1.1的一些区别

缓存处理

在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

带宽优化及网络连接的使用

HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

错误通知的管理

在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

Host头处理

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)

长连接

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

六、HTTP1.1和HTTP2.0的区别

多路复用

HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。
在这里插入图片描述
如果我们打开chrome的network可以查看,HTTP/2在网络请求方面与HTTP/1.1的明显区别
HTTP/1:
在这里插入图片描述
HTTP/2:
在这里插入图片描述

HTTP2.0的多路复用和HTTP1.X中的长连接复用有什么区别?
  • HTTP/1.* 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;

  • HTTP/1.1 Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;

  • HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行;
    具体如图:
    在这里插入图片描述

HTTP2.0多路复用有多好?

HTTP 性能优化的关键并不在于高带宽,而是低延迟。TCP 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐则被称为 TCP 慢启动。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。
HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。

头部数据压缩
  • 在HTTP1.1中,HTTP请求和响应都是由状态行、请求/响应头部、消息主体三部分组成。一般而言,消息主体都会经过gzip压缩,或者本身传输的就是压缩过后的二进制文件,但状态行和头部却没有经过任何压缩,直接以纯文本传输。随着Web功能越来越复杂,每个页面产生的请求数也越来越多,导致消耗在头部的流量越来越多,尤其是每次都要传输UserAgent、Cookie这类不会频繁变动的内容,完全是一种浪费。

  • HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

服务器推送
服务器推送到底是什么?

服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。具体如下:

  • 普通的客户端请求过程:
    在这里插入图片描述

  • 服务端推送的过程:
    在这里插入图片描述

服务端推送

服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP1.1中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。

为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
在这里插入图片描述

参考:
https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A
https://www.cnblogs.com/frankltf/p/10314604.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值