一、2015年, HTTP/2发布。

二、二进制协议

HTTP/2是一个二进制协议,头信息和数据体都是二进制,并且统称为“帧”(frame),头信息帧和数据帧。

二进制协议的一个好处是,可以定义额外的帧。HTTP/2定义了近10种帧,为将来的高级应用打好了基础。

三、多工

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

举个例来说,在一个TCP连接里面,服务器同时收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,这时就可以发送A请求已经处理好的部分,接着回应B请求,完成后,再发送A请求剩下的部分。这样双向的实时的通信就叫做多工(Multiplexing)。

四、数据流

因为HTTP/2的数据包是不按顺序发送的,同一个连接里面连接的数据包,可能属于不同的回应。因此必须要对数据包作标记,指出它属于哪个回应。

HTTP/2将每个请求或回应的所有数据包称为一个数据流(stream)。每个数据流都有独一无二的编号。数据包发送的时候都必须标记数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流ID一律为奇数,服务器发出的一律为偶数。

数据流发送到一半的时候客户端和服务端都可以发送信号(RST_STREAM帧),取消这个数据流。1.1版本取消数据流的唯一方法就是关闭TCP连接。这就是说HTTP/2可以取消某一次请求,同时保证TCP连接还打开着,可为其它请求所用。

客户端还可以指定数据流的优先级,优先级越高,服务器就会越早回应。

五、头信息压缩

HTTP协议不 带有状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如 Cookie 和 User Agent , 一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。

HTTP/2对这一点作了优化,引入了头信息压缩机制(header compression)。 一方面,头信息使用 gzip 或 compress 压缩后再发送;另一方面,客户端和服务端同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

六、服务器推送

HTTP/2允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送(server push)。

常见场景是客户端请求一个网页,这个网页里面包含很多静态资源。正常情况下,客户端必须收到网页后,解析 HTML 源码,发现有静态资源再发出静态资源请求。其实,服务器可以预期到客户端请求网页后,很可能会再请求静态资源,所以就主动把这些静态资源随着网页一起发送给客户端了。

原文参见:程序员的那些事

HTTP/2 协议入门相关推荐

  1. internet 协议入门

    前言 劳于读书,逸于作文. 原文地址:internet协议入门 博主博客地址:Damonare的个人博客 博主之前写过一篇博客:网络协议分析,在这篇博客里通过抓包,具体的分析了不同网络协议的传送的数据 ...

  2. 互联网协议入门(二)【转】

    原文地址:点击前往 上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想. 这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的. ======== ...

  3. 互联网协议入门(一)

    我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信.上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很 ...

  4. 互联网协议入门(二)

    上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想. 这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的. ================== ...

  5. 【Linux网络编程】网络协议入门

    00. 目录 文章目录 00. 目录 01. 前言 02. 概述 03. 物理层 04. 数据链路层 05. 网络层 06. 传输层 07. 应用层 08. 附录 01. 前言 我们每天使用互联网,你 ...

  6. HTTP协议入门——1.1版本

    HTTP协议入门--1.1版本 基本概述 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准. ...

  7. http 阮一峰_互联网协议入门(二)

    上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想. 这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的. ================== ...

  8. 【网络协议】互联网协议入门(一)

    我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信.上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很 ...

  9. UDS,ISO14229,ISO15765,ISO15031,J1939车辆诊断协议入门系列

    (图片来源于网络) 目录 摘要 1. 基础概念 1.1 诊断的概念 1.2 诊断的目标 1.3 诊断的实现 1.4 诊断是分层的 2. 项目应用 3. 协议栈开发 摘要 回想当年刚进去汽车行业,做新能 ...

  10. HTTP协议入门详解

    [1]HTTP简介 WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议.HTTP是 hypertext transfer protocol(超文本传输协议) ...

最新文章

  1. 微软出资10亿美元研究AGI,意与谷歌竞争?
  2. tomcat安装启动配置
  3. spring整合中application.xml配置
  4. onDraw(canvas)和dispatchDraw(canvas)方法
  5. 【C】C语言内存字节对齐
  6. 现在大火的Web3是什么 web1 web2
  7. paip.验证码识别---扭曲与旋转文字
  8. 【2019牛客暑期多校训练营(第七场)E】Find the median【权值线段树】
  9. 高德地图坐标拾取组件
  10. 基于Nodejs+vue开发实现酒店管理系统
  11. project不显示里程碑标志_Project教程 在Project软件中如何让里程碑任务显示更直观...
  12. 如何在Windows下安装听云NodeJs探针
  13. 在赛灵思ZCU102开发板上部署mnist手写体识别程序
  14. 从零起步做到运维技术经理,你必须掌握的23个细节!
  15. python 保存图片
  16. WIN10极限清理 C盘空间
  17. 现在java开发用什么工具
  18. 9-visual_feature_VINS-Mono
  19. 【单片机】单片机课程设计(测温打铃)附完整代码和电路图
  20. 在华为昇腾Ascend910上复现swin_transformer

热门文章

  1. Qt使用导出类报错:error C2491: “ZMapWidget::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义
  2. angular8实现对象数组根据某个属性排序(多个也可以)
  3. 【JS 逆向百例】网洛者反爬练习平台第二题:JJEncode 加密
  4. 爬虫必备技能!开发者工具技巧总结
  5. 【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)
  6. 【Gym - 101915D】Largest Group(二分图最大团,状压dp)
  7. html 闪烁字,HTML最简单的文字闪烁代码
  8. html中如何让三个方块并排,html – 并排设置两个div,然后设置第三个div
  9. python 爬虫 博客园_Python爬虫爬取博客园作业
  10. c语言二叉树构造与输出,C语言数据结构树状输出二叉树,谁能给详细的解释一下...