1.HTTP/2的定义:


HTTP/2即超文本传输协议2.0,是HTTP/1.1下一代的协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。
是自1999年HTTP/1.1发布后的首个更新。HTTP/2.0在2013年8月进行首次合作共事性测试。在开放互联网上HTTP/2.0将只用于"https://" 网址,而 "http://" 网址将继续使用HTTP/1。
目的是在开放互联网上增加使用加密技术,以提供强有力的保护去遏制主动攻击。

2.HTTP/1.1的不足:


一个网页加载的时候需要一些数据(css、js、图片等)这些请求是并发地向服务器发送的,并发的发送过程中就需要并发地创建TCP连接(一个请求对应一个TCP连接)。
一方面浏览器有并发连接数的限制,比如chrome限制一次性最多并发6个请求;如果请求创建TCP连接的并发请求一次超过6个,超过的请求就必须等待前面6个请求收到服务器的返回之后才能继续发送剩余请求。
这种等待,就算是一种相对串行的传输,效率不高;另一方面:由于不同请求需要建立不同的TCP连接,同时进行6次TCP的”三次握手”,那么创建连接的开销是比较大的;
同时对于一个服务器来说,它可创建的TCP连接数肯定是有上限的,如果每次都要创建6个TCP连接会导致服务器的TCP连接数很快被消耗完。所以在HTTP/1.1的这种方式下,数据传输的效率是受到很大制约的。

那为什么不直接共用一个TCP连接呢?因为在HTTP/1.1里面发送请求,在同一个TCP连接上发送数据必须是等待一个请求发送完成之后,才能发送第二个请求;同时服务器端也是要先把前一个请求的数据全部返回之后,才能返回第二个请求的数据。
如果在服务器中第一个请求处理(执行)特别慢,第二个请求即使比第一个请求先执行完成,也要等待第一个请求返回客户端后,才能返回。如果在HTTP/1.1中客户端与服务器端之间复用同一个TCP连接,那么数据传输就是一个串行而非并行的过程,效率较低。

3.HTTP/2的优势:


信道复用

可以在同一个TCP连接中实现客户端与服务器端之间多个请求的并行发送。

分帧传输

采用分帧传输的数据传输方式。在分帧的方式中,每一帧都有上下帧的联系,意思是传输当一个http请求的信息时,并不一定要按照连续的方式进行发送,而是可以把信息分成不同的帧一起发送。
如果中间的帧先到服务器,没有关系,等服务器把请求数据全部接收完之后,会根据帧信息里包含的先后顺序,把帧进行组合,得到一个真正的数据。得益于分帧传输与信道复用功能,使得在HTTP/2中,同一个连接可以并发地发送多个不同的请求。

Sever Push

服务器可以主动向客户端传输数据:

之前的HTTP版本服务器只能接收客户端发送的请求,并根据请求返回数据。而不能主动地自发地向客户端发送数据,但是HTTP/2实现。


总的来说:在HTTP/2中,得益于信道复用与分帧传输的好处,网站开启HTTP/2之后,每一个用户访问一个网站(网站会向服务器请求各种网页资源)的时候,永远只需要在浏览器(客户端)和服务器之间创建一个TCP连接。
因为在HTTP/2中一个TCP连接上完全可以实现数据的并发发送与返回,没有阻塞等待的过程,而且服务器端还能根据需求主动地向客户端(浏览器)推送一些信息,这就是HTTP2的优势。

举个例子:我们知道一个web页面加载会要求一些html、css、js等文件,它们都是以链接的形式在html文本里面显示的,通过浏览器解析了html里面的内容之后,再根据链接里面包含的URL地址再去请求对应的css和js文件。
在HTTP/2之前,这里个传输过程会存在一个顺序问题。需要先请求到html的文本然后在浏览器里面运行解析了这个文本之后,我们才能去发送css的请求和js的请求。
HTTP/2中有了推送(Sever Push)功能之后,在请求html的同时,服务器端可以主动把html里面所引用到的css和js文件通过同一个TCP连接并行地推送到浏览器(客户端)。
这样html、css和js的发送就是并行而非串行,整体的传输效率和性能提高了不少。

4.HTTP/2性能测试:


官方测试网站 https://http2.akamai.com/demo/http2-lab.html
官网提供了多种版本的对比测试有HTTP1.1与HTTP2的比较,还有服务器端推送(server-push)不同个数之间的比较:(由于网络延迟不同,测试结果或有差异)

  • HTTP1.1与HTTP2的对比:Compare HTTP1.1 (HTTP) vs HTTP2 (HTTPS):

    可以看到分别使用HTTP/1.1和HTTP/2加载同一张由多张小图片组成的大图片:HTTP/1.1用了39.45s,而HTTP/2只用了5.56s。HTTP2比HTTP/1.1快了将近7倍。
    因为为了加载这张大图,需要请求许多的小图,HTTP/1.1采用的是串行地请求,所以速度要比采用并行请求的HTTP/2要慢上许多。

  • HTTP2中服务器端发出推送(server-push)个数不同的比较:Compare HTTP2 vs HTTP2 server-push (30 objects pushed):

    可以看到同是HTTP/2,不使用Server Push的用时44.36s,使用Server Push的用时35.14s。使用Server Push与否对HTTP/2性能的影响不大。HTTP/2整体的性能提升主要在于整体的信道复用和分帧传输的设计上。
    这使得客户端与服务器之间只需要一个TCP连接并发地发送数据了。所以整体来说,对比于HTTP/1.1整体性能提升是非常大的。


这就是HTTP/2:For Faster and Safer Internet 信道复用和分帧传输提升了速度,以HTTPS为前提提供了安全。

HTTP/2简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. SSM学习成果总结,图书管理系统进行三层整合

    一:先看一下效果图 二:目录结构  三:pojo package com.zh.pojo; import lombok.AllArgsConstructor; import lombok.Data; ...

  2. 『题解』洛谷P2296 寻找道路

    更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description 在有向图\(\mathrm G\)中,每条边的长度均为\(1\),现给定起点和终点 ...

  3. .net core Json字符串的序列化和反序列化通用类源码,并模拟了10万数据对比DataContractJsonSerializer和Newtonsoft性能

    我们在开发中Json传输数据日益普遍,有很多关于Json字符串的序列化和反序列化的文章大多都告诉你怎么用,但是却不会告诉你用什么更高效.因为有太多选择,人们往往会陷入选择难题. 相比.NET Fram ...

  4. Vue 项目添加单元测试发现的问题及解决

    用 Jest 测试单文件组件 1.安装 Jest 和 Vue Test Utils npm install --save-dev jest @vue/test-utils 2.配置 package.j ...

  5. c++中while(cin>>str)和ctrl z的相关问题探讨

    对于while (cin>>str)和ctrl z的问题,网上有以下解释: -------------------------------------------------------- ...

  6. 决策树(上)-ID3、C4.5、CART

    参考资料(要是对于本文的理解不够透彻,必须将以下博客认知阅读,方可全面了解决策树): 1.https://zhuanlan.zhihu.com/p/85731206 2.https://zhuanla ...

  7. 03-MyBatis拦截器机制

    目录 MyBatis拦截器介绍 拦截器的使用 拦截器介绍及配置 源码分析 总结 本文转载自MyBatis拦截器原理探究 MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽 ...

  8. ArcGIS API For Javascript :读取 CSV 文件的方法

    我们临时会遇到一些测试数据,通常从数据库中以 CSV 格式导出.最简单实用的方法就是使用 ajax 去读取文件,记得引入 jQuery . 例如,在<ArcGIS JS API :新增一个热力图 ...

  9. 力扣(LeetCode)移除链表元素 个人题解

    删除链表中等于给定值 val 的所有节点. 这题粗看并不困难,链表的特性让移除元素特别轻松,只用遇到和val相同的就跳过,将指针指向下一个,以此类推. 但是,一个比较麻烦的问题是,当链表所有元素都和v ...

  10. C语言|博客作业07

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9935 我在这个课程的 ...