HTTP2: springboot启用http2

本文详细介绍了如何在SpringBoot应用中启用HTTP/2,包括使用H2、配置SSL证书、设置Tomcatconnector以支持HTTP2,并通过OkHttpClient验证HTTP2连接。同时提到了在与华为联调过程中的实践和相关配置示例。
摘要由CSDN通过智能技术生成

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: 8080

  http2:
    enabled: true #启用http2

  ssl: #添加证书
    key-store: classpath:keystore.jks
    key-store-password: pass1234
    key-store-type: JKS
    key-alias: wisely
    key-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;

    @Bean
    public 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

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是关于Spring Boot自动装配的回答: Spring Boot通过自动装配机制,可以在不需要显式配置的情况下自动配置应用程序所需的各种组件和库。它通过使用一组预定义的规则和条件,自动配置应用程序,并提供了默认配置,以便应用程序能够快速启动和运行。 Spring Boot自动装配使用了基于Java注解的配置方式,通过在应用程序的代码中添加注解来声明应用程序需要的依赖关系和配置选项。这些注解包括@Configuration、@EnableAutoConfiguration和@ComponentScan等。 @Configuration注解用于指示类是一个配置类,其中包含Spring Bean定义。@EnableAutoConfiguration注解用于启用Spring Boot的自动配置机制。它会根据类路径中存在的jar包和Spring Boot提供的默认规则,自动配置应用程序所需的组件和库。@ComponentScan注解用于指示Spring应该扫描的包以查找组件和配置类。 在Spring Boot中,还有一些其他的注解可以用于自动装配,例如@Bean、@ConditionalOnClass和@ConditionalOnProperty等。这些注解可以帮助开发人员定义特定的条件,以便只在满足某些条件时才进行自动装配。 总之,Spring Boot的自动装配机制可以帮助开发人员快速搭建应用程序,同时也提供了灵活的配置选项和扩展机制,使得开发人员可以根据自己的需求进行定制和扩展。 ### 回答2: Spring Boot的自动装配是指通过注解和配置来自动实现Spring Boot应用程序的组件和依赖项的装配过程。Spring Boot提供了许多注解和配置选项,可以帮助我们简化和加速应用程序的开发过程。 在Spring Boot中,自动装配是基于条件注解的方式进行的。当某个条件满足时,对应的组件将被自动装配到应用程序中。通过这种方式,我们可以根据特定的需求和环境来自动选择和配置合适的组件。 Spring Boot的自动装配使用了许多条件注解,如@AutoConfigureAfter、@AutoConfigureBefore、@Conditional、@ConditionalOnBean、@ConditionalOnClass、@ConditionalOnExpression等。这些注解帮助我们在启动应用程序时自动加载和配置所需的组件。 自动装配的好处在于可以减少开发人员的工作量,降低开发成本。它通过提供默认的配置和自动加载依赖项,减少了手动配置的复杂性。同时,自动装配也提高了应用程序的可维护性和可扩展性,因为我们可以根据实际需求来灵活地调整和替换组件。 值得注意的是,自动装配并不适用于所有情况。有时我们需要手动配置一些组件或处理一些特殊情况,这时可以通过自定义配置来覆盖默认的自动装配行为。 总之,Spring Boot的自动装配是一种方便快捷的开发方式,它能够帮助我们快速搭建和配置应用程序所需的组件和依赖项。通过合理使用自动装配,我们能够提高开发效率和应用程序的质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值