1. 程式人生 > >在Spring Boot中啟用Http2.0

在Spring Boot中啟用Http2.0

HTTP2.0特性

使用HTTP/2的幾點注意事項

要使用HTTP/2需要注意以下幾點

  1. 雖然HTTP/2沒有明確要求必須使用TLS,但當前幾乎所有瀏覽器均只支援 HTTP/2 Over TLS。所以在使用之前我們需要先製作一張證書。
  2. 我們製作的證書是不被瀏覽器認可的,所以會有安全提示,不能用於生產環境

在本文的例子中使用的是undertow

製作證書

使用JDK自帶的keytool,證書型別為:PKCS12

keytool -genkey -alias undertow -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -dname "CN=localhost, OU=localhost, O=localhost, L=Zhengzhou, ST=Henan, C=CN"
輸入金鑰庫口令:
再次輸入新口令:

執行時會要求輸入證書口令,這裡輸入的是123456。執行完命令後會在執行的資料夾生成一個keystore.p12的檔案。

配置Web容器

spring boot預設使用的是tomcat,我們需要先將tomcat移除,然後換成undertow

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <
exclusion
>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId> </dependency>

如果不移除tomcat依賴會一直以Tomcat作為容器啟動。

然後將剛才生成的keystore.p12拷貝到src/main/resources下。然後在application.yml中配置伺服器資訊。

server:
  port: 8443 # 埠
  compression:
    enabled: true
  http2:
    enabled: true # 啟用http2
  ssl:
    enabled: true
    key-store: classpath:keystore.p12 # 啟用http2
    key-store-password: 123456 # 證書密碼
    key-store-type: PKCS12 # 證書型別
    protocol: TLSv1.2 # 協議型別
    key-alias: undertow

這時如果啟動伺服器,是隻支援https的。

@SpringBootApplication
public class RabbitmqProducerApplication implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {

    public static void main(String[] args) {
        SpringApplication.run(RabbitmqProducerApplication.class, args);
    }

    @Override
    public void customize(UndertowServletWebServerFactory factory) {
        factory.addBuilderCustomizers((UndertowBuilderCustomizer) builder -> {
            builder.addHttpListener(8080, "0.0.0.0");
        });
    }
}

這裡增加8080埠的監聽,配置參考:

啟動後可以看到控制檯打印出如下資訊:

INFO 4288 --- [           main] o.s.b.w.e.u.UndertowServletWebServer     : Undertow started on port(s) 8443 (https) 8080 (http) with context path ''

測試

增加一個測試控制器

@RestController
@RequestMapping("/log")
public class LogController {

    private Logger logger = LoggerFactory.getLogger(LogController.class);

    @GetMapping("/info")
    public String info() {
        logger.info("Info log");
        return "info";
    }
}

再次請求
在這裡插入圖片描述

觀察兩次請求的size,一次是236一次是69,這是因為HTTP/2的頭部壓縮技術。

相關推薦

Spring Boot啟用Http2.0

HTTP2.0特性 使用HTTP/2的幾點注意事項 要使用HTTP/2需要注意以下幾點 雖然HTTP/2沒有明確要求必須使用TLS,但當前幾乎所有瀏覽器均只支援 HTTP/2 Over TLS。所以在使用之前我們需要先製作一張證書。 我們製作的證書是不被瀏

SpringBoot2.0學習筆記:(十) Spring Boot整合Redis

一、關於Lettuce 關於在SpringBoot2.0.x版本中整合Redis,我們先看一下官方的遷移文件有什麼說的: Spring Boot2.0遷移指南 當你使用spring-boot-starter-redis的時候,Lettuce現已取代Jedis作為Redis驅動

spring cloud】在spring cloud服務,打包ms-core失敗,報錯Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE:repackage (default

在spring cloud服務中,有一個ms-code專案,只為所有的微服務提供核心依賴和工具類,沒有業務意義,作為核心依賴使用。所以沒有main方法,沒有啟動類。 在spring cloud整體打包的過程中報錯: [INFO] --- maven-jar-plugin:3.0.2:jar (def

SpringBoot2.0學習筆記:(九) Spring Boot整合Mybatis與Druid

一、專案的搭建 Druid對Spring boot做了很好的適配,所有的工作都只需要在配置檔案中完成。 具體的Druid在Spring Boot中的配置可以看:GitHub文件 首先看一下專案引入的jar包: <dependencies> &

spring boot 訪問 REST 接口

pri clas rest pla oot bject res .get obj RestTemplate restTemplate = new RestTemplate(); Object result = restTemplate.getForObject("http

3.Spring Boot使用Swagger2構建強大的RESTful API文檔

pack 效果 type 現象 業務邏輯 blank depend imp any 原文:http://www.jianshu.com/p/8033ef83a8ed 由於Spring Boot能夠快速開發、便捷部署等特性,相信有很大一部分Spring Boot的用戶會用來構

spring-boot實戰【07】【轉】:Spring BootWeb應用的統一異常處理

http integer private fin ima lex clas 友好 ref 我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個全

spring-boot實戰【06】【轉】:Spring Boot使用Swagger2

des values 產生 service sof div 解決 整合 data 由於Spring Boot能夠快速開發、便捷部署等特性,相信有很大一部分Spring Boot的用戶會用來構建RESTful API。而我們構建RESTful API的目的通常都是由於多終端的

spring-boot實戰【12】:Spring Boot使用JavaMailSender發送郵件

nts fun rop oci 單元測試 prop 快速入門 cat tid 相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender接口實現郵件發送。在Spring Boot的Starter模塊中也為此提供了自動化配置。下面通過實例

Spring Boot 配置定時任務,實現多線程操作

pre log pri http code china 部分 多線程操作 .net 參考的代碼部分 https://git.oschina.net/jokerForTao/spring_boot_schedule 一目了然!Spring Boot 中配置定時任務,實現

spring boot實現響應圖片的方法以及改進

spring-bootController響應,噴出圖片,是一個很常見的功能,代碼如下@RequestMapping(value = { "/img/{filename:.+}" }, method = RequestMethod.GET, produces = { MediaType.I

關於Spring boot讀取屬性配置文件出現中文亂碼的問題

led Coding uri oot serve http 添加 message 程序 1.再配置文件(application.properties)中添加編碼字符集 #返回頁面、數據中文亂碼問題spring.http.encoding.force=truespring.h

Spring Boot的initializers的作用分析

ack array init pes rtl ble set bsp warn 在SpringApplication的實例屬性中有一個初始器的屬性:List<ApplicationContextInitializer<?>> initializers

Thymeleaf 模板 在spring boot 的引用和應用

end text www. bean template har ica ngs sta Thymeleaf是一個java類庫,他是一個xml/xhtml/html5的模板引擎和Struts框架的freemarker模板類似,可以作為mvc的web應用的view層。 Thy

spring-boot application.properties的各種配置

ecif creat ati .sh drive fig nag ide cte ###########################################################datasource connect mysql#############

Spring Boot實現logback多環境日誌配置

cati feature gprof 配置 color app config 現在 ng- 在Spring Boot中,可以在logback.xml中的springProfile標簽中定義多個環境logback.xml: <springProfile name=

Spring bootRedis的使用

分布 random code sleep fault Language 文件 keyword attr spring boot對常用的數據庫支持外,對nosql 數據庫也進行了封裝自動化。 redis介紹 Redis是目前業界使用最廣泛的內存數據存儲。相比memcached

Spring Boot的自定義start pom

sin string cond aps 標註 bind rip ges 由於 start pom是springboot中提供的簡化企業級開發絕大多數場景的一個工具,利用好strat pom就可以消除相關技術的配置得到自動配置好的Bean。 舉個例子,在一般使用中,我們使用基

spring boot Spring data jpa數據庫表字段命名策略

_id -s ber data 駝峰命名 org body strategy 命名 spring boot 中Spring data jpa命名策略 數據庫,表字段命名是駝峰命名法(UserID),Spring data jpa 自動更新之後是 user_id, 表字段不對

springboot(三):Spring bootRedis的使用

red implement getc factory pro acc 系統 val fault spring boot對常用的數據庫支持外,對nosql 數據庫也進行了封裝自動化。 redis介紹 Redis是目前業界使用最廣泛的內存數據存儲。相比memcached,Red