关于HTTP的发展介绍

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 关于HTTP的发展介绍

Http1.0阶段


每当客户端发送一次请求到服务端的时候,都会打开一个tcp socket,当交互完毕之后,链接就会被关闭。(典型案例就是串行链接,每一次链接的过程中都需要打开关闭链接)


为了解决多次链接所带来的资源损耗问题,后来出现了持久链接这种方式。建立持久链接的方式有两种。HTTP/1.0+的keep-alive和HTTP/1.1的持久连接。


Http1.0 keep-alive


这种方式的连接也没有太受到欢迎,所以也没有留下来太久,说明文档也比较少。


先来说说Keep-Alive


在没有Keep-Alive前,我们与服务器请求数据的流程是这样:


网络异常,图片无法展示
|


浏览器请求//static.mtime.cn/a.js–>解析域名–>HTTP连接–>服务器处理文件–>返回数据–>浏览器解析、渲染文件


浏览器请求//static.mtime.cn/b.js–>解析域名–>HTTP连接–>服务器处理文件–>返回数据–>浏览器解析、渲染文件


这样循环下去,直至全部文件下载完成。


这个流程最大的问题就是:每次请求都会建立一次HTTP连接,也就是我们常说的3次握手4次挥手,这个过程在一次请求过程中占用了相当长的时间,而且逻辑上是非必需的,因为不间断的请求数据,第一次建立连接是正常的,以后就占用这个通道,下载其他文件,这样效率多高啊!你猜对了,这就是Keep-Alive。


Keep-Alive解决的问题


Keep-Alive解决的核心问题:一定时间内,同一域名多次请求数据,只建立一次HTTP请求,其他请求可复用每一次建立的连接通道,以达到提高请求效率的问题。这里面所说的一定时间是可以配置的,不管你用的是Apache还是nginx。


是否说在http1里面的所有请求只要带上 keep-alive就可以顶替http1.1的所有持久链接?

不可以,http-alive里面仍然存在一定的缺陷。这种指令属于补充类型的协议,并非是通用的标准协议,因此部分的服务端无法能够接受和立即这种请求协议,也就无法完成持久化链接。


Http1.1阶段


在1.1的版本里面,采取了持久链接来替代Keep-Alive。默认所有的链接都是持久链接,如果需要关闭链接,可以在报文里面添加Connection:Close的首部。(注意,不发送Connection:close指令,链接也有可能会被关闭)


Http2.0阶段


HTTP1.1还是存在效率问题


在HTTP1.1中是默认开启了Keep-Alive,他解决了多次连接的问题,但是依然有两个效率上的问题:


第一个:串行的文件传输。


当请求a文件时,b文件只能等待,等待a连接到服务器、服务器处理文件、服务器返回文件,这三个步骤。我们假设这三步用时都是1秒,那么a文件用时为3秒,b文件传输完成用时为6秒,依此类推。(注:此项计算有一个前提条件,就是浏览器和服务器是单通道传输)


第二个:连接数过多。


我们假设Apache设置了最大并发数为300,因为浏览器限制,浏览器发起的最大请求数为6,也就是服务器能承载的最高并发为50,当第51个人访问时,就需要等待前面某个请求处理完成。


HTTP/2的多路复用


HTTP/2的多路复用就是为了解决上述的两个性能问题,我们来看一下,他是如何解决的。


解决第一个:


在HTTP1.1的协议中,我们传输的request和response都是基本于文本的,这样就会引发一个问题:所有的数据必须按顺序传输,比如需要传输:hello,只能从h到o一个一个的传输,不能并行传输,因为接收端并不知道这些字符的顺序,所以并行传输在HTTP1.1是不能实现的。


网络异常,图片无法展示
|


HTTP/2引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,如下图所示,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。同样是因为有了序列,服务器就可以并行的传输数据,这就是流所做的事情。


网络异常,图片无法展示
|


解决第二个问题:


HTTP/2对同一域名下所有请求都是基于流,也就是说同一域名不管访问多少文件,也只建立一路连接。同样Apache的最大连接数为300,因为有了这个新特性,最大的并发就可以提升到300,比原来提升了6倍!


以前我们做的性能优化不适用于HTTP/2了


JS文件的合并


我们现在优化的一个主要方向就是尽量的减少HTTP的请求数, 对我们工程中的代码,研发时分模块开发,上线时我们会把所有的代码进行压缩合并,合并成一个文件,这样不管多少模块,都请求一个文件,减少了HTTP的请求数。但是这样做有一个非常严重的问题:文件的缓存。当我们有100个模块时,有一个模块改了东西,按照之前的方式,整个文件浏览器都需要重新下载,不能被缓存。现在我们有了HTTP/2了,模块就可以单独的压缩上线,而不影响其他没有修改的模块。


多域名提高浏览器的下载速度


之前我们有一个优化就是把css文件和js文件放到2个域名下面,这样浏览器就可以对这两个类型的文件进行同时下载,避免了浏览器6个通道的限制,这样做的缺点也是明显的,1.DNS的解析时间会变长。2.增加了服务器的压力。有了HTTP/2之后,根据上面讲的原理,我们就不用这么搞了,成本会更低。

目录
相关文章
|
5月前
|
网络协议 应用服务中间件 网络性能优化
HTTP进化史:从HTTP1的简单到HTTP3的强大
HTTP进化史:从HTTP1的简单到HTTP3的强大
|
5月前
|
网络协议 算法
《图解HTTP》- HTTP协议历史发展(下)
《图解HTTP》- HTTP协议历史发展(下)
83 0
|
5月前
|
网络协议 安全 数据安全/隐私保护
HTTP/2与HTTP/3:互联网传输协议的新旧交替
HTTP/2与HTTP/3:互联网传输协议的新旧交替
69 2
|
5月前
|
缓存 网络协议 算法
二、《图解HTTP》- HTTP协议历史发展(上)
二、《图解HTTP》- HTTP协议历史发展(上)
72 0
|
5月前
|
域名解析 网络协议 网络架构
http 详解 一 http的诞生
http 详解 一 http的诞生
45 0
|
网络协议 前端开发 算法
http发展史
http发展史
|
网络协议 安全
HTTP协议发展和版本
HTTP协议发展和版本
94 0
|
网络协议 安全 网络性能优化
HTTP协议演进:为什么说HTTP/1.1的时代已经过去了
随着互联网的不断发展,HTTP 协议也在不断进化和改进,从 HTTP/1.0 到 HTTP/1.1,再到 HTTP/2 和 HTTP/3,每一个版本都带来了更加先进的技术和更好的性能优化。
|
存储 缓存 网络协议
HTTP/2 和 HTTP1.x 比,有什么优势和特点?
HTTP/2 和 HTTP1.x 比,有什么优势和特点?
HTTP/2 和 HTTP1.x 比,有什么优势和特点?
|
Web App开发 存储 缓存
探索http1.0到http3.0的发展史,详解http2.0
实例代码探索http1.0到http3.0的发展史,详细拆解http2.0,队头阻塞的解决方案,分层帧,多路复用,传输层的伟大变革
277 0
探索http1.0到http3.0的发展史,详解http2.0