Spring Boot 启用 http2 协议

HTTP2是万维网(WWW)发布的HTTP网络协议主流版本,也是当前HTTP协议的最新版本(1997年发布的HTTP 1.1)。它来源于SPDY协议,最初由谷歌开发。

1. HTTP2的优势

所有主流的浏览器,如Chrome, Opera, Firefox, Safari, Edge浏览器都支持这个协议。相对于HTTP1.1协议,HTTP2的优势主要包括下面几点。

1.1 多路复用和并发性

一般渲染HTML页面可能需要JS, CSS,图像等多个资源文件,需要从服务器获取资源从而获得更好的界面体验。使用HTTP1.1协议,HTML响应客户端每个JS, CSS,单独图像文件的请求,每个都需要一个TCP连接请求,需要占用昂贵的服务器和网络资源。

在HTTP2协议中有所改进,不再是客户端在单个HTML页面中请求多个所需的资源。服务器通过一个TCP连接将页面中所需响应推送给客户端,这样服务器提供必要的数据给浏览器渲染页面,浏览器无需等待第一个响应。

1.2 流优先级

客户端可以指示对服务器来说哪些资源比其他资源更重要。为了提供资源优先级,HTTP2标准有个特性来提供相关的资源权重和依赖关系(如果流依赖于另一个流)。

  1. 每个流可以分配1-256之间的整数权重。

  2. 每个流可以提供对其他流的显式依赖。

  3. 依赖关系和权重的结合将允许客户端构造优先级树,该树表示客户端希望如何接收资源的偏好。服务器将使用这些信息对流处理进行优先级排序,并控制系统资源,如CPU、内存和其他资源,一旦响应可用,它将分配带宽以确保向客户端交付高优先级响应。

为了加快页面加载时间,所有新的浏览器基于资源类型,其在页面中位置,甚至参考以前访问优先级的经验值排列请求优先级,如果在之前访问的渲染中某个资源被阻塞,则同样资源在未来的请求可能会被优先考虑。

1.3 头部压缩

每个HTTP传输携带一组头信息,描述传输资源及其属性。在HTTP1.1协议中,所有的头部属性值以明文格式发送,每个请求将占用500-800字节,如果使用HTTP cookie,大小还会增加。HTTP2通过使用HPACK压缩格式技术提供了更好的解决方案,描述如下:

  1. 传输的头部字段通过静态霍夫曼编码,大大减少了传输大小。

  2. 它还需要服务器和客户端维护和更新以前发送的头部字段索引列表,然后使用它作为参考来有效地编码以前传输的值。霍夫曼提供了传输时要压缩的特定值,而传输前的索引列表使我们能够通过传输索引值对重复值进行编码,这些索引值可用于有效地查找和重新构建完整的头部键和值。

1.4 服务器推送

服务器将把所有未被请求的依赖资源推送给客户端。

1.5 流控制

流控制机制来阻止发送方给接收方发送过多数据,有很多原因会导致可能无法处理这些过量数据,如接收方在负载较重的情况下无法响应,或者没有足够的缓冲空间去处理数据。

HTTP2通过提供接收窗口(rwnd)解决了这些问题,窗口设定通信发送方和接收方之间传输数据的大小。当第一次建立连接时,它将使用默认设置。如果在下载文件时,服务器正向客户端流传输大量数据,此时接收窗口可能会成为限制因子;类似的,当客户端向服务器发送大量数据时,服务器接收窗口将成为限制因子。无论怎样,窗口大小越小则限制越大。

如果窗口为零,则表明不能再发送数据,除非应用清除缓冲区中已有数据。这种流程机制适用在连接整个生命周期中持续运行的每个TCP连接:每个请求包都有两端最新的RW值,根据发送方和接收方的状态以及进程速度动态地切换数据流速率。

HTTP/2不再支持HTTP 1.1的分块移位编码机制,因为它提供了自己的、更有效的数据流机制。

2. Spring Boot 配置

无需更改/更新任何Java应用程序或API来适用HTTP2协议,使用HTTP2可使Java应用程序工作得更好,在客户端和服务器上消耗资源更少。

2.1 tomcat 配置

只有Tomcat 9 版本之后版本才支持HTTP2协议。在 conf/server.xml 中增加内容:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
<SSLHostConfig honorCipherOrder="false">
<Certificate certificateKeyFile="conf/ca.key" certificateFile="conf/ca.crt"/>
</SSLHostConfig>
</Connector>

2.2 Spring Boot配置

如果服务器已经支持HTTP2,Spring Boot增加下面配置属性:

server.http2.enabled=true

3. 总结

本文介绍了HTTP2相对与HTTP1.1的主要特性,并说明如何配置Tomcat和Spring Boot以启用HTTP2协议。

Spring Boot 启用 http2 协议相关推荐

  1. nginx配置域名启用http2协议

    HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议.HTTP/2在支持HTTP1.1的基础上拓展了, 较之1.1在性能上有着大 ...

  2. Spring Boot + WebSocketClient + wss协议证书认证 + 客户端心跳重连机制

    近期公司项目中要对接第三方的WebSocket服务获取数据,本来以为是很简单的工作,但问题是服务方提供的是"wss"协议,需要证书认证,为此查阅了很多博客,都没有解决, 最后还是自 ...

  3. spring boot启用tomcat ssl

    首先要生成一个keystore证书.参考:Tomcat创建HTTPS访问,java访问https,ssl证书生成:cer&jks文件生成摘录,spring-boot 这里复现一下完整过程: 安 ...

  4. spring boot 启用定时任务调取精伦IDR210阅读软件获取身份证信息 jna dll

    注:使用时确定jdk为32位  使用绝对路径读取接口时 需要确定接口文件存放位置 1.引入jna.jar <dependency><groupId>net.java.dev.j ...

  5. 爬虫框架webmagic与spring boot的结合使用--转

    原文地址:http://www.jianshu.com/p/c3fc3129407d 1. 爬虫框架webmagic WebMagic是一个简单灵活的爬虫框架.基于WebMagic,你可以快速开发出一 ...

  6. Spring Boot——基于AOP的HTTP操作日志解决方案

    解决方案 package com.hailiu.web.aop;import com.fasterxml.jackson.databind.ObjectMapper; import com.haili ...

  7. 如何在Spring Boot App中集成H2数据库

    你好朋友, 在本教程中,我们将尝试探索如何在Spring Boot应用程序中与H2数据库集成. 在进行检查之前,让我们了解有关H2数据库的一些基础知识,如下所述,然后我们将讨论H2数据库与Spring ...

  8. 在Spring Boot中使用@ConfigurationProperties

    在最近的博客文章中,我简短地介绍了如何在Spring Boot应用程序中配置邮件 . 要将属性注入配置中,我使用了Spring的@Value注释. 但是Spring Boot提供了一种使用属性的替代方 ...

  9. spring_如何在Spring Boot App中集成H2数据库

    spring 你好朋友, 在本教程中,我们将尝试探索如何在Spring Boot应用程序中与H2数据库集成. 在进行检查之前,让我们了解有关H2数据库的一些基础知识,如下所述,然后我们将讨论H2数据库 ...

最新文章

  1. Linux控制台打开显示字符画,Linux 命令行字符画工具
  2. 【SQLServer】【恢复挂起的解决方案】附加文件时候的提示“无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的。 ”【数据库恢复】...
  3. 自学python如何找工作-新手小白如何自学Python出去找工作?我用这五本书告诉你...
  4. Stm32 IAP程序编写及用户程序编写
  5. 12、数据库的设计范式
  6. 【升级版】如何使用阿里云云解析API实现动态域名解析,搭建私有服务器【含可执行文件和源码】...
  7. PHP配置环境中开启GD库
  8. 在Spark Scala/Java应用中调用Python脚本,会么?
  9. Linux 制作安装程序(rpm,deb)的几个心得
  10. Android精品开源项目整理_V20140221(持续更新中..)
  11. 五十位名嘴用文字悼念心中永远的榜样罗京
  12. matlab 脉冲压缩算法,雷达脉冲压缩matlab
  13. IE兼容模式文件上传所遇问题解决
  14. 电脑任务栏图标为白色解决方法
  15. TDA4 J721 EVM开发板开发学习
  16. 基于Javaweb的小项目(类似于qqzone) 2 ——服务端连接数据库并实现CRUD的通用操作
  17. PowerBI visuals共计246组2020年1月31日扒取(Power BI 视觉对象)
  18. 【爬虫实践】获取某城市天气数据
  19. OFweek(第三届)2018中国高科技产业大会在深圳开幕
  20. 【Code】Java 打印基本图形(圆形,梯形,椭圆,三角形,矩形)的面积和周长

热门文章

  1. atheros 无线驱动接收流程
  2. openssl静态库使用出错undefined reference to `COMP_CTX_new‘
  3. JQuery写农场的小游戏
  4. html鼠标悬停显示箭头,CSS 悬停时出现箭头的按钮
  5. 两个序列的中位数(超详细的讲解)
  6. 浅谈MacBook Pro 2019 15寸
  7. HDU - 2504
  8. 分层自动化测试体系模型
  9. 【chatgpt】解除PDF的password
  10. lookback地址