Spring Boot 2.x实战56 - Spring Web MVC 28 - HTTP/2应用

本文介绍了如何在Spring Boot 2.x中利用HTTP/2进行服务端推送技术,包括如何配置和使用HTTP/2推送资源到现代浏览器。讲解了在控制器中使用PushBuilder进行推送操作,以及展示了使用Chrome浏览器查看推送效果的过程。同时,提到了新书《从企业级开发到云原生微服务:Spring Boot 实战》的相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在前面已经配置SSL和开启了HTTP/2(https://blog.youkuaiyun.com/wiselyman/article/details/106121219),我们只需要在控制器方法里的参数使用javax.servlet.http.PushBuilder对象即可使用HTTP/2的推送技术。PushBuilder主动将资源推送到客户端(浏览器);这个特性也需要浏览器的支持,当然现代浏览器绝大部分都支持这个功能。

HttpBuilder属于builder模式,主要方法有:

  • path:中间操作,指定需推送的资源的地址;
  • addHeader:中间操作,设定资源的内容类型;
  • push:终结操作,执行推送动作。

HttpBuilder推送的服务端资源是通过ResourceHttpMessageConverter来确定媒体类型和转换的,所以在Spring MVC下我们是不需要显示指定媒体类型的。

我们在static目录下新建push目录,并加入下面的资源:
在这里插入图片描述
这里面重要的push.html,它是服务端推送的终点。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>HTTP/2 Push Demo</title>
    <link rel="stylesheet" href="/push/push.css" />
    <link rel="stylesheet" href="/push/not-push.css" />
    <script type="application/javascript" src="/push/push.js"></script>
    <script type="application/javascript" src="/push/not-push.js"></script>
</head>
<body>
    <img src="/push/wyn.jpg"/>
</body>
</html>

当前页面的资源push.csspush.jswyn.jpg是服务端推送的,not-push.cssnot-push.js是正常情况。

演示的控制器内容:

@Value("classpath:/static/push/push.html")
private Resource pushPage; //1

@GetMapping(value = "/http2-push") 
public Resource http2Push(PushBuilder pushBuilder) { //2
    pushBuilder
            .path("push/wyn.jpg") //3
//            .addHeader("content-type", MediaType.IMAGE_JPEG_VALUE) //4
            .push(); //5
    pushBuilder
            .path("push/push.css") //3
//            .addHeader("content-type", "text/css") //4
            .push(); //5
    pushBuilder
            .path("push/push.js") //3
//            .addHeader("content-type", "application/javascript") //4
            .push(); //5
    return pushPage;
}
  1. 本书不会引入页面模板引擎技术(Thymeleaf等),所有的网页内容都是静态的。我们为了使用REST服务打开静态页面,方法返回值Resource也是通过ResourceHttpMessageConverter确定资源的媒体类型(text/html)并将载静态页面返回给浏览器;这个静态页面即我们要推送的目的地;若您使用了页面模版引擎技术,你可简单返回页面的路径即可;
  2. 可以在控制器方法参数中直接注入PushBuilder对象;
  3. 使用path方法指定需要推送资源的位置;
  4. 使用addHeadr设定推送资源的内容类型,
  5. 使用push方法推送。

我们使用Chrome访问https://localhost:8443/async/http2-push,并打开Chrome的控制台:
在这里插入图片描述

新书推荐:

我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html

在这里插入图片描述
主要包含目录有:

第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和屁股里(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值