HTTP2.0

HTTP2.0

最近在读一本书叫《web性能权威指南》谷歌公司高性能团队核心成员的权威之作。

一直听说HTTP2.0,对此也仅仅是耳闻,没有具体研读过,这次正好有两个篇章,分别讲HTTP1.1和HTTP2.0。

两者还能好好对比一下,两者之间的巨大区别,以及HTTP2.0解决了哪些实际问题。

无论什么网络,也不管所用网络协议是什么版本,所有应用都应该致力于消除或减少不必要的网络延迟将需要传输的数据压缩至最少

HTTP2.0就是为了做这些优化而出现的。

一、HTTP1.1的几个特点

1)持久连接

每个TCP连接开始都有三次握手,要经历一次客户端与服务器间完整的往返,而开启了持久化连接就能不必每次都要握手。

在连接中有这个属性的就是打开了持久化连接。下图展示了通过持久 TCP 连接取得 HTML 和 CSS 文件:

2)HTTP管道

持久HTTP多次请求必须严格满足先进先出(FIFO)的队列顺序:发送请求,等待响应完成,再发送客户端队列中的下一个请求。

HTTP管道可以让我们把FIFO队列从客户端(请求队列)迁移到服务器(响应队列)。

这样的话在第一个请求完成后,能马上开始处理第二个请求。

但HTTP 1.x不允许一个连接上的多个响应数据交错到达(多路复用),因而一个响应必须完全返回后,下一个响应才会开始传输。

也就是说即使客户端同时发送了两个请求,而且CSS资源先准备就绪,服务器也会先发送HTML响应,然后再交付CSS

而HTTP2.0就可以多路复用,并可以按优先级返回响应。

3)度量和控制协议开销

HTTP 1.0增加了请求和响应首部,以便双方能够交换有关请求和响应的元信息。

很少改变的接收和传输首部、缓存指令、cookie等,所有这些未经压缩的HTTP元数据经常会给每个HTTP请求增加几千字节的协议开销

YSlow中有23条规则,第20条就是“Use Cookie-Free Domains for Components”,请求的时候将cookie去除。

而在HTTP2.0中可以首部压缩,减少上面的开销提升性能。

4)连接与拼合

快的请求是不用请求,减少请求次数总是最好的性能优化手段。

HTTP 1.x中,可以考虑把多个资源捆绑打包到一块,通过一次网络请求获取。

而在HTTP2.0中可以多向请求和响应,消除了请求多个资源就要使用多个TCP连接的限制。

5)嵌入资源

把资源嵌入文档可以减少请求的次数。

比如,JavaScript和CSS代码,通过适当的script和style块可以直接放在页面中。

而图片甚至音频或PDF文件,都可以通过数据URI(data:[mediatype][;base64],data)的方式嵌入到页面中。

而在HTTP2.0中有个服务器推送,与嵌入资源唯一的不同就是可以把这个过程从应用中拿出来,放到HTTP协议本身来实现。

二、HTTP2.0的特点

1)二进制分帧层

HTTP 2.0性能增强的核心,全在于新增的二进制分帧层,它定义了如何封装HTTP消息并在客户端与服务器之间传输。

接下来说的几个特点都是基于这个机制来实现的。

2)流、消息和帧

所有HTTP 2.0通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。

每个数据流以消息的形式发送,而消息由一或多个帧组成,这些帧可以乱序发送,然后再根据每个帧首部的流标识符重新组装。

简言之,HTTP 2.0把HTTP协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息。

相应地,很多流可以并行地在同一个TCP连接上交换消息。

3)多向请求与响应

在HTTP 1.x中,如果客户端想发送多个并行的请求以及改进性能,那么必须使用多个TCP连接。

HTTP 2.0中的二进制分帧层突破了限制:客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来。

4)请求优先级

把HTTP消息分解为很多独立的帧之后,就可以通过优化这些帧的交错和传输顺序,进一步提升性能。

为了做到这一点,每个流都可以带有一个31比特的优先值。

如果服务器不理睬优先值,可能导致应用响应变慢:浏览器明明在等关键的CSS和JavaScript,服务器却在发送图片,从而造成渲染阻塞。

5)每个来源一个连接

大多数HTTP连接的时间都很短,而且是突发性的,但TCP只在长时间连接传输大块数据时效率才最高。

HTTP 2.0通过让所有数据流共用同一个连接,可以更有效地使用TCP连接。

HTTP 2.0不仅能够减少网络延迟,还有助于提高吞吐量和降低运营成本!

6)服务器推送

服务器除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。

7)首部压缩

在HTTP1.x中,首部元数据都是以纯文本形式发送的,通常会给每个请求增加500~800字节的负荷。

为减少这些开销并提升性能,HTTP 2.0会压缩首部元数据。

HTTP 2.0连接的两端都知道已经发送了哪些首部,这些首部的值是什么,从而可以针对之前的数据只编码发送差异数据。

分类: 网络前端性能

时间: 2024-10-24 15:51:21

HTTP2.0的相关文章

HTTP2.0那些事

1. HTTP2.0的前世 http2.0的前世是http1.0和http1.1这两兄弟.虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼.http1.0诞生于1996年,协议文档足足60页.之后第三年,http1.1也随之出生,协议文档膨胀到了176页.不过和我们手机端app升级不同的是,网络协议新版本并不会马上取代旧版本.实际上,1.0和1.1在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的.今天的http2.0也是一样,

SPDY以及HTTP2.0

背景介绍 HTTP2.0跟SPDY在不少理念上是相似的,目的都是为了提升HTTP1.1的性能. HTTP2.0将会是业界的标准,比SPDY要完善,今后可能会都转向http2.0而放弃SPDY. SPDY流程 SPDY需要TLS1.1以上版本的支持,需要TLS的NPN扩展(Next Protocol Negotiation:13172),也就是加了一个域Query Supported Protocol List. 严重依赖SSL,不管收到的是HTTP请求,还是HTTPS请求,SPDY都会走一趟SS

HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事

转载自AlloyTeam:http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/ 1. web始祖HTTP 全称:超文本传输协议(HyperText Transfer Protocol) 伴随着计算机网络和浏览器的诞生,HTTP1.0也随之而来,处于计算机网络中的应用层,HTTP是建立在TCP协议之上,所以HTTP协议的瓶颈及其优化技巧都是基于TCP协议本身的特性,例如tcp建立连接的3次握手和断

http1.0,http1.1和http2.0的区别

HTTP1.0 HTTP 1.1主要区别 长连接 HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接. HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响.因此最好能维持一个长连接,可以用个长连接来发多个请求. 节约带宽 HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401

非加密http2.0

客户端 okhttp/3.4.1 http2.0协议本身并不要求基于https,但是浏览器,服务器都要求http2.0 over https,毕竟https是大势所趋嘛.想体验2.0的低延迟,先把https做好. 因此,使用非加密的http2.0需要对okhttp源码进行修改,修改起来并不复杂,我的策略是在协议为http时,判断host,如果是我们的域名xxx.suning.com,协议返回HTTP_2. 服务端 nginx/1.10 以前总是认为,http2.0必须且只能配置在server的4

HTTP2.0的二进制分帧

1.帧的类型: 在二进制分帧的结构中,头部有8个字节(64Bit),其中有一个字节(8Bit)来标志帧的类型: HTTP2.0规定了如下帧类型: DATA: 用于传输HTTP消息体 HEADERS:用户传输关于流的额外的首部字段 PRIORITY:用户指定或者重新指定引用资源的优先级 RST_STRING:用于通知流的非正常终止 SETTINGS:用于通知两端通信方式的数据配置 PUSH_PROMISE:用于发出创建流和服务器引用资源的要约 PING:用于计算往返时间,执行“活性”检查 GOAW

iOS性能之HTTP2.0

在移动互联网领域蓬勃发展的今天,APP的性能也成为各大公司重点关注的方向,该系列文章主要针对iOS的性能的几个方面做一些研究. 什么是HTTP2.0? 网上很容易搜到关于HTTP2.0的概念的文章,这里不再累述. 苹果从iOS9开始支持HTTP2.0,对iOS开发人员来说,即是iOS9开始,NSURLSession可以支持HTTP2.0. 因为苹果已经打算废弃NSURLConnection,所以NSURLConnection不能支持HTTP2.0. UIWebView也不能支持HTTP2.0(当

http2.0 相对于 http1.1的优势

1.http2.0完全是多路复用的,只需一个连接就可实现并行 可以将不同的请求夹杂在一起,只需一个连接就能加载一个页面. 2.可以让服务器将响应主动推动到客户端缓存中 当浏览器请求一个网页时,服务器除了返回HTML之外,还会推动客户端会用到的资源(比如页面中内嵌的样式文件,脚本文件,图片文件)到客户端的缓存中,避免后续请求这些资源时的往返时间浪费. 3.压缩报头,降低了开销 http1.1不支持头部压缩,所以产生了SPDY和HTTP2.0协议,SPDY使用的是通用的DEFLATE算法,HTTP2

HTTP2.0 原理详解

影响一个网络请求的因素主要有两个,带宽和延迟.今天的网络基础建设已经使得带宽得到极大的提升,大部分时候都是延迟在影响响应速度. 连接无法复用 连接无法复用会导致每次请求都经历三次握手和慢启动.三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大. head of line blocking head of line blocking会导致带宽无法被充分利用,以及后续健康请求被阻塞. HTTP1.0 -> HTTP1.1 不过pipelining并不是救世主,它也存在不少缺陷: pi