什么是 HTTP/2

HTTP/2 就是超文本传输协议的第二个主要版本,是自1999年 HTTP 1.1 之后发布的首个更新,主要基于 SPDY 协议(是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验)。

和 HTTP1.1 比起来有什么优势

1、HTTP/2采用二进制格式而非文本格式

2、HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行

3、使用报头压缩,HTTP/2降低了开销

4、HTTP/2让服务器可以将响应主动“推送”到客户端缓存中

其中的多路复用对前端优化性能有很大的帮助

什么是多路复用

在 HTTP 1.1 中,发起一个请求是这样的:

浏览器请求 url -> 解析域名 -> 建立 HTTP 连接 -> 服务器处理文件 -> 返回数据 -> 浏览器解析、渲染文件

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

为了解决这个问题, HTTP 1.1 中提供了 Keep-Alive,允许我们建立一次 HTTP 连接,来返回多次请求数据。

但是这里有两个问题:

HTTP 1.1 基于串行文件传输数据,因此这些请求必须是有序的,所以实际上我们只是节省了建立连接的时间,而获取数据的时间并没有减少。

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

HTTP/2 对同一域名下所有请求都是基于流,也就是说同一域名不管访问多少文件,也只建立一路连接。

一个域名对应一个连接,一个流代表了一个完整的请求-响应过程。帧是最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。多路复用,就是在一个 TCP 连接中可以存在多个流。

理解HTTP/2的多路复用相关推荐

  1. 漫谈五种IO模型(主讲IO多路复用)

    首先引用levin的回答让我们理清楚五种IO模型 1.阻塞I/O模型 老李去火车站买票,排队三天买到一张退票. 耗费:在车站吃喝拉撒睡 3天,其他事一件没干. 2.非阻塞I/O模型 老李去火车站买票, ...

  2. 一文看懂IO多路复用

    本文首发在 技术成长之道 博客,访问 hechen0.com 查看更多,或者微信搜索「技术成长之道」关注我的公众号,或者扫描下方二维码关注公众号获得第一时间更新通知! 本文让你理解 什么是IO多路复用 ...

  3. 查看nginx进程_nginx的进程模型与配置

    nginx的进程模型可以理解为:多进程+多路复用. nginx的进程模型 使用linux的ps命令查看当前nginx的进程(ps -ef | grep nginx),可以看到有两个进程,分别是ngin ...

  4. 自己记录的一些Java后端面试题

    一.说明 记录了一些自己的面试问题....找工作真难啊 干这行 太卷了 算法得会把 基础还得非常扎实 源码也得看 目录 一.说明 二.Java基础部分 java基础 1.String s = &quo ...

  5. Linux C网络编程基本知识

    第 1 章:TCP/IP 网络编程基础 1.  客户端和服务器程序必须运行在相同操作系统上吗?为什么? 答:不是,在网络中计算机之间的彼此通信标准遵循 TCP/IP 协议,并在操作系统内核中实现.而具 ...

  6. Python:通过一个小案例深入理解IO多路复用

    通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import timestart = time.time()u ...

  7. 理解操作系统IO多路复用

    在讲解IO多路复用之前,我们需要预习一下文件以及文件描述符. 什么是文件 程序员使用I/O最终都逃不过文件. 因为这篇同属于高性能.高并发系列,讲到高性能.高并发就离不开Linux/Unix,因此这里 ...

  8. io多路复用的原理和实现_彻底理解 IO 多路复用实现机制

    本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy已收录,有 ...

  9. poll函数_如何理解IO多路复用的三种机制Select,Poll,Epoll?

    专注分享Linux后台服务器开发,包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TC ...

最新文章

  1. 使用apidocJs快速生成在线文档
  2. java记事本应用程序_Java教程:使用记事本编写运行Java程序
  3. nginx 配置优化详解
  4. VRP网络操作系统简介
  5. 作者:杨燕(1964-),女,西南交通大学信息科学与技术学院教授、博士生导师。...
  6. Javascript中的几种继承方式比较
  7. activity状态的保存和恢复
  8. EndNote编辑毕业论文格式
  9. 国内一些比较大型的IT软件外包公司名单
  10. 浪潮之巅: 中国企业高管硅谷交流会
  11. 如何将多个Excel 表合并成一个
  12. 换号码的烦恼引起的思考
  13. 数据分析-美国小孩英文名分析-可视化(含代码)
  14. 英语中名词复数读法(清辅音、浊辅音)
  15. Shiro的在Springboot中的使用
  16. mysql outer apply_CROSS APPLY和 OUTER APPLY 区别详解
  17. 设计模式(一):里氏代换原则
  18. 软件项目经理需要了解的法律法规
  19. SONY新的圈铁耳机
  20. Pulsar集群 监听mysql8的binlog

热门文章

  1. 全球 IPv4 地址消耗殆尽,苹果主力推进 IPv6
  2. 雷军:4G 手机已清仓,全力转 5G;QQ音乐播放中途插语音广告引热议;Wine 5.9 发布 | 极客头条...
  3. 1415120000,华为这个数字赞爆!
  4. 珍稀干货!阿里 Web 音视频开发趟坑指南
  5. “整洁代码根本就是个骗局!”
  6. “弃用 Google AMP!”
  7. Python 之父从 Dropbox 退
  8. 论剑乌镇:历届互联网大会热词盘点
  9. 华为否认今年将推出搭载鸿蒙系统手机;苹果或在 3 年内推出 5G 基带芯片;Node.js 12.12.0 发布 | 极客头条...
  10. JavaScript 中的垃圾回收和内存泄露如何处理?| 技术头条