Http2.0详解
前言
HTTP/1.1协议为现在网络提供了20年的支持。从那时起,网站已经从静态的、文本驱动的文档发展为交互式的、富媒体的应用程序。在此期间底层协议保持不变这一事实正好说明了它的通用性和能力。但随着网络变得越来越大,它的局限性变得更加明显。我们需要一个替代品,而且我们很快就需要它。 于是HTTP/2诞生了。HTTP/2 于 2015 年初发布,在不改变现有应用程序语义的情况下优化了网站连接。这意味着你可以利用 HTTP/2 的特性,例如更高的性能、更新的错误处理、减少延迟和降低开销,而不需要改动你的您的 Web 应用程序。到目前为止,近 84%的现代浏览器和27% 的所有网站都支持 HTTP/2,而且这些数字还在逐渐增加。
❝
HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议。由互联网工程任务组(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小组进行开发。该组织于2014年12月将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。HTTP/2标准于2015年5月以RFC 7540正式发表。
❞
Http/2的重要概念
❝
HTTP/2 的最大变化影响了数据在客户端和服务器之间的格式化和传输方式。
❞
二进制数据格式
HTTP/1.1消息以文本传输,都是由起始行,首部和实体正文(可选)组成,各部分之间以文本换行符分隔。这使得请求和响应易于格式化,甚至可以使用数据包分析工具读取。HTTP/2 使用二进制协议封装数据,二进制协议的好处是它允许更紧凑、更容易压缩且不易出错的传输,HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。HTTP/2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
❝
- 帧:HTTP/2 数据通信的最小单位消息:指 HTTP/2 中逻辑上的 HTTP 消息。例如请求和响应等,消息由一个或多个帧组成。
- 流:存在于连接中的一个虚拟通道。流可以承载双向消息,每个流都有一个唯一的整数ID。
❞
二进制差别
持久 TCP 连接
在 HTTP 的早期版本中,必须为每个请求和响应创建一个新的 TCP 连接。HTTP/1.1 引入了持久连接,允许通过单个连接进行多个请求和响应。问题是消息是按顺序交换的,Web 服务器拒绝接受新的请求,直到之前的请求得到满足。
HTTP/2 允许通过单个 TCP 连接同时进行多个下载,从而简化了这一点。建立连接后,客户端可以发送新请求,同时接收对先前请求的响应。这不仅减少了建立新连接的延迟,而且服务器不再需要维护到相同客户端的多个连接。
复用Tcp连接
Tcp多路复用,代替原来的序列和阻塞机制。所有就是请求的都是通过一个 TCP连接并发完成。 HTTP 1.x 中,如果想并发多个请求,必须使用多个 TCP 链接,且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制,如下图,红色圈出来的请求就因域名链接数已超过限制,而被挂起等待了一段时间
多路复用
头压缩和重用
在 HTTP/1.1 中,标头是不可压缩的,并且对于每个请求都是重复的。随着请求数量的增加,重复头信息的数量也在增加。HTTP/2 消除了多余的标头并压缩剩余的标头以显着减少会话期间重复的数据量。
- HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送;
- 首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;
- 每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值。
来自于网络
服务器推送
服务器现在可以推送资源,而不是等待客户端请求资源。这允许网站抢先向用户发送内容,最大限度地减少等待时间。
体验下两者之间加载速度
spring中如何使用http/2?
您可以使用server.http2.enabled配置属性在 Spring Boot 应用程序中启用 HTTP/2 支持 。这种支持取决于所选的 Web 服务器和应用程序环境,因为 JDK8 不支持开箱即用的协议。
❝
Spring Boot使用HTTP/2协议必须先配置 SSL。
❞
使用Undertow服务器
从 Undertow 1.4.0+ 开始,支持 HTTP/2,对 JDK8 没有任何额外要求。
使用Jetty服务器
从 Jetty 9.4.8 开始也支持 HTTP/2 。要使用Http/2,你的应用程序需要有两个额外的依赖项: org.eclipse.jetty:jetty-alpn-conscrypt-server和org.eclipse.jetty.http2:http2-server.
使用Tomcat服务器
默认情况下,SpringBoot随Tomcat8.5.x一起提供。对于该版本,只有在主机操作系统上安装了libtcnative库及其依赖项时,才支持HTTP/2。库文件夹必须在JVM库路径中可用(如果尚未可用)。可以使用-Djava.library.path=/usr/local/opt/tomcat-native/lib这样的JVM参数来实现。有关这方面的更多信息,请参阅Tomcat官方文档。在没有本机支持的情况下启动Tomcat 8.5.x会记录以下错误:
ERROR 8787 --- [ main] o.a.coyote.http11.Http11NioProtocol : The upgrade handler [org.apache.coyote.http2.Http2Protocol] for [h2] only supports upgrade via ALPN but has been configured for the ["https-jsse-nio-8443"] connector that does not support ALPN.
这个错误不是致命的,应用程序仍然以HTTP/1.1ssl支持启动。使用tomcat9.0.x和JDK9运行应用程序不需要安装任何本机库。要使用Tomcat 9,可以用所选的版本覆盖Tomcat.version build属性。
结束
❝
识别下方二维码!回复: 「
入群
」 ,扫码加入我们交流群!❞
点赞是认可,在看是支持
阅读更多文章
Http2.0详解的更多相关文章
- 百度大脑UNIT3.0详解之嵌入式对话理解技术
相信很多人都体验过手机没有网时的焦虑,没有网什么也做不了.而机器人也会遇到这样的时刻,没有网或者网络环境不好的情况下,无法识别用户在说什么,也无法回复用户.在AIoT(AI+物联网)飞速普及的现在,智 ...
- 百度大脑UNIT3.0详解之知识图谱与对话
如今,越来越多的企业想要在电商客服.法律顾问等领域做一套包含行业知识的智能对话系统,而行业或领域知识的积累.构建.抽取等工作对于企业来说是个不小的难题,百度大脑UNIT3.0推出「我的知识」版块专门为 ...
- 百度大脑UNIT3.0详解之数据生产工具DataKit
在智能对话项目搭建的过程中,高效筛选.处理对话日志并将其转化为新的训练数据,是对话系统效果持续提升的重要环节,也是当前开发者面临的难题之一.为此百度大脑UNIT推出学习反馈闭环机制,提供数据获取.辅助 ...
- Mongostat 3.0详解
可以参考之前写的这篇博客: Mongostat 2.6详解 mapped Changed in version 3.0.0. Only for MMAPv1 Storage Engine. The t ...
- setTimout( , 0) 详解
setTimout( , 0) 一.前言 前端工程师们工作久了,一般都会在某些地方看见过这样的代码: setTimeout(function(){ // TODO }, 0); 举个实例,移动端我们经 ...
- CM自动化安装CDH5.14.0详解
CDH5.14.0版本说明 CDH最早版本只包含hadoop.hive.hbase等基础组件,CDH5.14.0版本目前已经封装了spark.impala.kudu(CDH 5.13.x开始)等众多组 ...
- Android数据存储之GreenDao 3.0 详解
前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...
- iOS中 蓝牙2.0详解/ios蓝牙设备详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 整体布局如下: 程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang ...
- OAuth 2.0详解
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版. 本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为R ...
随机推荐
- eclipse自动格式化代码
前段时间在Eclipse里面设置了java文件保存时自动格式化,在java->Code Style->Formatter里设置了自定义的格式化的样式,这样每次保存后都会自动格式化代码,用了 ...
- YOLO3升级优化版!Poly-YOLO:支持实例分割!
YOLO3升级优化版!Poly-YOLO:支持实例分割! POLY-YOLO: HIGHER SPEED, MORE PRECISE DETECTION AND INSTANCE SEGMENTATI ...
- CVPR2020:端到端学习三维点云的局部多视图描述符
CVPR2020:端到端学习三维点云的局部多视图描述符 End-to-End Learning Local Multi-View Descriptors for 3D Point Clouds 论文地 ...
- 番外篇:搭建Windows环境下的RabbitMQ环境
搭建Windows环境下的Rabbitmq环境 下载erlang语言包OTP.官网地址: https://www.erlang.org/downloads 如果下载不了,可以选择百度网盘下载,里面的版 ...
- 性能工具之stress工具使用教程(带源码说明)
stress是一个在linux下的压力测试小工具. 我看到有些人用这个工具来描述一些资源耗尽的场景,也有人用它来做混沌测试中.请使用者要注意,这个工具并不是模拟业务问题的,是模拟系统级问题的.所以 ...
- 07:JS(03)
BOM与DOM操作 # 截至目前为止 我们虽然已经学会了js语法 但是你会发现跟浏览器和html文件还是一点关系没有 """ BOM 浏览器对象模型 Browser Ob ...
- 618技术特辑(三)直播带货王,“OMG买它”的背后,为什么是一连串技术挑战?
[本期推荐]为什么一到大促,我们的钱包总是被掏空?是大家自制力不够,还是电商平台太会读懂人心,从技术维度,抽丝剥茧一探究竟. 摘要:动辄几十上百万人同时在线的直播间,让所有人能同时公平的去抢购,并且还 ...
- 理解Spring:IOC的原理及手动实现
Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架.也是几乎所有Java工作者必须要掌握的框架之一,其优秀的设计思想以及其代码实现上的艺术也是我们需要掌握的. ...
- RAC+DG修改sys密码
一.版本: 操作系统版本:SUSE 11 数据库版本:11.2.0.4 二.需求 因安全要求,需要修改SYS密码 三.步骤 1节点执行命令: alter user sys identified by ...
- WPF中选择文件和选择文件夹的方法
最近从winform转WPF,遇到了各种各样的问题.然而网上的关于WPF的资料少之又少,甚至连基本的文件选择操作,百度搜索的首页都没有一个比较好的方法.所以,踩了几个坑之后,我把我得到的方法分享给大家 ...