HTTP2: springboot启用http2

springboot http2应用条件

  • 使用servlet 4.0
  • jdk 9+
  • tomcat 9+

springboot 开启h2

创建证书

创建脚本:

keytool -genkey -keyalg RSA -alias wisely -keystore keystore.jks -storepass pass1234 -validity 4000 -keysize 2048

在这里插入图片描述

添加springboot配置
server:port: 8080http2:enabled: true #启用http2ssl: #添加证书key-store: classpath:keystore.jkskey-store-password: pass1234key-store-type: JKSkey-alias: wiselykey-password: pass1234
验证

浏览器验证
通过浏览器访问接口,然后查看使用的protocol。
在这里插入图片描述

springboot 开启h2c (无ssl)

Springboot默认自带的tomcat开启http2必须使用ssl,所以需要重新启一个tomcat,并修改其配置,使其支持HTTP2.0 (Springboot支持多connector)。如果只考虑支持h2c,可以让springboot自带的tomcat不启动。

新启的tomcat可以不需要上面的配置,把它注释掉:

server:
#  http2:
#    enabled: true #启用http2
#
#  ssl: #添加证书
#    key-store: classpath:keystore.jks
#    key-store-password: pass1234
#    key-store-type: JKS
#    key-alias: wisely
#    key-password: pass1234

添加TomcatServletWebServerFactory 的Configuration类:

import org.apache.catalina.connector.Connector;
import org.apache.coyote.http2.Http2Protocol;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class H2cConfig {private int port = 8081;@Beanpublic ServletWebServerFactory servletContainer(){TomcatServletWebServerFactory servletWebServerFactory = new TomcatServletWebServerFactory();Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.addUpgradeProtocol(new Http2Protocol());connector.setPort(port);servletWebServerFactory.addAdditionalTomcatConnectors(connector);return servletWebServerFactory;}
}

验证

使用okhttp进行验证。
代码如下:

import okhttp3.ConnectionPool;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.Response;import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.io.IOException;public class OkHttpClient {public static String get(String url) throws IOException {List<Protocol> protocols = new ArrayList<>();
//        protocols.add(Protocol.HTTP_2);protocols.add(Protocol.H2_PRIOR_KNOWLEDGE);okhttp3.OkHttpClient.Builder builder = new okhttp3.OkHttpClient.Builder().readTimeout(Duration.ofSeconds(10)).connectTimeout(Duration.ofSeconds(10)).writeTimeout(Duration.ofSeconds(10)).connectionPool(new ConnectionPool()).protocols(protocols);okhttp3.OkHttpClient httpClient = builder.build();Request request = new Request.Builder().get().url(url).build();Response response = httpClient.newCall(request).execute();return response.body().string();}public static void main(String[] args) throws IOException {String body = OkHttpClient.get("http://localhost:8081/test/get?q=fd");System.out.println("http2 response:" + body);}
}

启动springboot应用。
再过行OkHttpClient.main()方法,运行结果:
在这里插入图片描述

参考

与华为联调过程中,HTTP/2.0 协议踩坑
Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)
Spring Boot实现Undertow服务器支持HTTP2协议
Spring Boot 2.x实战50 - Spring Web MVC 22 - Servlet容器(配置SSL与HTTP/2)
springboot http2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2774736.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Sentinel 源码分析

Sentinel源码分析 项目源码 1.Sentinel的基本概念 Sentinel实现限流、隔离、降级、熔断等功能&#xff0c;本质要做的就是两件事情&#xff1a; 统计数据&#xff1a;统计某个资源的访问数据&#xff08;QPS、RT等信息&#xff09;规则判断&#xff1a;判断限流规则、隔离规…

NGINX upstream、stream、四/七层负载均衡以及案例示例

文章目录 前言1. 四/七层负载均衡1.1 开放式系统互联模型 —— OSI1.2 四/七层负载均衡 2. Nginx七层负载均衡2.1 upstream指令2.2 server指令和负载均衡状态与策略2.2.1 负载均衡状态2.2.2 负载均衡策略 2.3 案例 3. Nginx四层负载均衡的指令3.1 stream3.2 upstream指令3.3 四…

油猴脚本开发总结

一、在线安装 打开浏览器&#xff0c;点击右上角“ ”&#xff0c;在弹出的菜单上点击“拓展”跳转到下面这个页面&#xff1a; 点击"获取Microsoft Edge拓展"&#xff1a; 然后搜索框输入“tampermonkey”&#xff1a; 获取最上面这个黑绿色拓展&#xff1a; 二、…

vulnhub中Beelzebub靶机

渗透思路 一.信息收集1.网段探测2.端口探测3.常见漏洞扫描4.目录扫描5.web页面分析 二.渗透继续目录扫描ssh连接提权提权&#xff0c;flag 一.信息收集 1.网段探测 ┌──(root㉿kali)-[~] └─# nmap -Pn 192.168.0.0/24 --min-rate 10000 Starting …

java实现栈功能

1.使用数组方式 public static void main(String[] args) throws Exception {BufferedReader br new BufferedReader(new InputStreamReader(System.in));int operateNum Integer.parseInt(br.readLine());//操作次数String inputInfo;//输入信息StringBuilder outputSb new…

吉他学习:右手拨弦方法,右手拨弦训练 左手按弦方法

第六课 右手拨弦方法https://m.lizhiweike.com/lecture2/29362775 第七课 右手拨弦训练https://m.lizhiweike.com/lecture2/29362708

SDL库的下载与配置(Visual Studio )2024/2/4更新

一.SDL的下载 下载链接 二.SDL的环境配置 解压以后放在中文路径下 不会添加环境变量自行搜索&#xff08;比较简单网上教程很多&#xff09; 下面进行编译器的配置 复制这段内容 x64\SDL2main.lib x64\SDL2.lib将这段代码放进去运行一下 #include <SDL.h>int main(int…

07-使用Package、Crates、Modules管理项目

上一篇&#xff1a;06-枚举和模式匹配 当你编写大型程序时&#xff0c;组织代码将变得越来越重要。通过对相关功能进行分组并将具有不同功能的代码分开&#xff0c;您可以明确在哪里可以找到实现特定功能的代码&#xff0c;以及在哪里可以改变功能的工作方式。 到目前为止&…

量子计算+材料建模的理论效率提升100000倍!英国公司Phasecraft取得算法突破

编辑丨慕一 编译/排版丨沛贤 深度好文&#xff1a;1250字丨6分钟阅读 在量子计算近期可能的商业应用中&#xff0c;材料建模最有前景的领域之一。在这个领域的应用可能只需要几千个量子比特&#xff0c;而不像其他应用需要数百万个量子比特。目前该领域是量子计算的研究热点…

大规模块存储 EC 系统构建

本文整理自 2023 年 7 月 DataFunSummit 2023 数据基础架构峰会——大规模存储架构分论坛的同名主题分享。 非常欢迎大家的到来&#xff0c;今天由我来分享百度智能云块存储 EC 系统的构建。块存储系统在百度智能云的产品名叫 CDS&#xff0c;底层 EC 系统由 Aries 承担。 今天…

JavaScript基础(28)_获取元素的其他样式

其他样式操作的属性 clientWidth(只读)&#xff1a;获取元素的"可见宽度"&#xff0c;包括内容区和内边距(返回的是一个数字&#xff0c;不带px&#xff0c;可直接进行计算)。 clientHeight(只读)&#xff1a;获取元素的"可见高度"&#xff0c;包括内容区…

nodeJS 的 npm 设置国内高速镜像之淘宝镜像的方法

1、我们知道 nodeJS 是老外搞出来的&#xff0c;服务器放在了国外&#xff0c;国内的小朋友访问起来会比较慢&#xff0c;阿里巴巴的淘宝给出了有力支持&#xff0c;现在我们就将 nodeJS 的镜像地址切换为国内的淘宝镜像。 2、查看当前的镜像地址&#xff1a; npm get registr…

高级FPGA开发之基础协议PCIe(二)

高级FPGA开发之基础协议之PCIe&#xff08;二&#xff09; 一、TLP报文类型 在PCIe总线中&#xff0c;存储器读写、I/O读写和配置读写请求TLP主要由以下几类报文组成&#xff1a; 1.1 存储器读请求TLP和读完成TLP 当PCIe主设备&#xff08;RC或者EP&#xff09;访问目标设备…

立面效果图为何要用云渲染100?渲染100邀请码1a12

建筑设计是一门艺术&#xff0c;而立面效果图是艺术的展现&#xff0c;它在设计中非常重要。 1、立面效果图的重要性 立面效果图能用来展示建筑物的风格、材质、色彩以及环境等因素&#xff0c;通过它&#xff0c;设计师可以检验项目质量&#xff0c;评估效果是否达到预期&…

C#上位机与三菱PLC的通信04--MC协议之A-1E报文测试

到目前为止&#xff0c;还没有网上有哪个文章有我如此的报文分析&#xff0c;操作实例&#xff0c;一大批都是抄来抄去&#xff0c;没有截图&#xff0c;没有说明&#xff0c;没有实例&#xff0c;有卵用呀&#xff0c;仅以此文章献给最爱的粉丝&#xff0c;希望对各位大师有些…

MySQL-索引(INDEX)

文章目录 1. 索引概述及优劣势2. 索引结构和不同引擎对索引的支持情况2.1 Btree2.2 Hash索引 3. 索引分类4. 索引语法5. 索引在什么情况下会失效&#xff1f;5.1 最左前缀法则5.2 范围查询5.3 索引列运算5.4 头部模糊查询5.5 OR连接条件5.6 字符串不加引号5.7 数据分布影响 6. …

【Qt学习笔记】Qt Creator环境下 信号与槽 详解(自定义信号槽、断连、lambda表达式等)

文章目录 1. 信号槽概念1.1 信号的本质1.2 槽的本质1.3 标准信号槽1.4 信号槽 实例 2. 自定义信号槽2.1 自定义槽函数2.2 自定义信号2.3 带参 信号槽 3. 信号槽的意义 与 作用4. 信号槽断连 &#xff08;了解&#xff09;5. lamda表达式的使用5.1 基本用法5.2 捕获局部变量5.3 …

七、Nacos源码系列:Nacos服务发现

目录 一、服务发现 二、getServices()&#xff1a;获取服务列表 2.1、获取服务列表 2.2、总结图 三、getInstances(serviceId)&#xff1a;获取服务实例列表 3.1、从缓存中获取服务信息 3.2、缓存为空&#xff0c;执行订阅服务 3.2.1、调度更新&#xff0c;往线程池中…

【VTKExamples::PolyData】第二十三期 InterpolateMeshOnGrid

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例InterpolateMeshOnGrid,并解析接口vtkProbeFilter 、vtkWarpScalar & vtkDealuany2D等多个接口,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!…

用友U8+OA doUpload.jsp 文件上传漏洞复现

0x01 产品简介 用友U8+ OA经过20多年的市场锤炼,不断贴近客户需求,以全新UAP为平台,应对中型及成长型企业客户群的发展,提供的是一整套企业级数智化升级解决方案,为成长型企业构建精细管理、产业链协同、社交化运营为一体的企业互联网经营管理平台,助力企业应势而变,赢…