Spring Boot启用GZIP压缩

news2024/11/17 0:53:40

1.为什么是需要gzip压缩?

经常我们都会与服务端进行大数据量的文本传输,例如 JSON 就是常见的一种格式。通过 REST API 接口进行 GET 和 POST 请求,可能会有大量的文本格式数据提交、返回。然后对于文本,它有很高的压缩率,如果在 GET/POST 请求时候对文本进行压缩会节省大量的网络带宽,减少网络时延。 HTTP 协议在相应部分支持 Content-Encoding: gzip ,浏览器请求时带上 Accept-Encoding: gzip 即可,服务端对返回的 response body 进行压缩,并在 response 头带上 Content-Encoding: gzip,浏览器会自动解析。 然而 HTTP 没有压缩 request body 的设计,因为在客户端发起请求时并不知道服务器是否支持压缩。因此没法通过 HTTP 协议来解决,只能在服务端做一些过滤器进行判断,人为约束。压缩和解压在提升网络带宽的同时,会带来 CPU 资源的损耗。

2.代码工程

实验目的

对返回的json启用gzip压缩

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot-demo</artifactId>
        <groupId>com.et</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>gzip</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.9.0</version>
        </dependency>

    </dependencies>
</project>

controller

请求和响应都是同一个user对象,方便后面测试对比它们的大小

package com.et.gzip.controller;

import com.et.gzip.model.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@Slf4j
public class HelloWorldController {
  
    @PostMapping("/hello")
    public User showHelloWorld(@RequestBody User user){
        log.info("user:"+ user);

        return user;
    }
   
}

application.yaml

server:
  port: 8088
  compression:
    enabled: true
    mime-types: application/json,application/xml,text/html,text/plain,text/css,application/x-javascript

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • GitHub - Harries/springboot-demo: a simple springboot demo with some components for example: redis,solr,rockmq and so on.(gzip)

3.测试

  • 启动 Spring Boot工程
  • 用postman请求http://127.0.0.1:8088/hello

96

可以看到 request body 285B,respnse body 64B ,将近5倍的差距。

4.引用

  •  Spring Boot启用GZIP压缩 | Harries Blog™

   

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

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

相关文章

systemserver进程监控者--watchdog

戳蓝字“牛晓伟”关注我哦&#xff01; 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章&#xff0c;技术文章也可以有温度。 本文摘要 本文同样采用自述的方式来介绍systemserver进程的监控者watchdog&#xff0c;通过本文您将了解watchdog的作用&#xff0c;它…

【机器学习】梯度下降算法

梯度下降算法 这篇博客更加详细&#xff0c;以下只是我个人的理解 梯度下降算法原理讲解——机器学习-CSDN博客 梯度下降算法是一种优化算法&#xff0c;通过梯度下降找到函数最小值时的自变量值。 其基本思想是沿着梯度方向的反方向更新参数&#xff0c;直到逼近函数的极值…

【LLM大模型】生成式人工智能大型语言模型的安全性:概述

生成性AI大型语言模型&#xff08;LLMs&#xff09;的安全性&#xff1a;概述 具有生成性AI能力的大型语言模型&#xff08;如ChatGPT&#xff09;正面临加速采用和创新。生成性AI&#xff08;GAI&#xff09;的日益普及不可避免地引发了对这些模型相关风险和安全性的担忧。本…

Linux 下 gdb 的使用

目录 一、概述1、安装和启动 GDB 二、 GDB 常用命令1、查看源码2、断点2.1 设置断点2.2 查看断点信息2.3 删除断点2.4 激活/禁用断点2.5 观察断点2.6 捕获信号2.7 线程中断 3、查看信息3.1 查看数据3.2 查看内存3.3 查看栈信息3.4 查看栈帧信息 4、运行、调试5、编辑和搜索 一、…

MacOS安装 Python 和 PyCharm

MacOS安装 Python3.12.5 和 PyCharm 小阿呜有话说一、MacOS安装PythonPython官网下载 二、MacOS安装PyCharmPyCharm官网下载 叮嘟&#xff01;这里是小啊呜的学习课程资料整理。好记性不如烂笔头&#xff0c;今天也是努力进步的一天。一起加油进阶吧&#xff01; 小阿呜有话说 …

发完朋友圈就“退款”?黑神话的玩家是否都是“忠实粉丝”?

​声明&#xff1a;此篇为 ai123.cn 原创文章&#xff0c;转载请标明出处链接&#xff1a;https://ai123.cn/2228.html 《黑神话&#xff1a;悟空》自上线以来&#xff0c;便引发了玩家社区的广泛讨论。游戏的退款现象主要受到了一些技术问题和个人体验差异的影响。部分玩家因遇…

容器的ip地址不稳定问题、联合文件系统、核对时间、制作基础镜像

在docker中部署线上考试系统 1、部署前端服务器 # 上传本地下载的dist文件&#xff0c;因为上传的是目录&#xff0c;加-r选项 scp -r D:\云计算\压缩包\项目\dist root192.168.2.50:/root/ # 创建基础容器 [rootdocker ~]# docker run -it --name c0 centos:latest /bi…

SolidityFoundry BitMap

写合约的时候&#xff0c;记录某个账户的bool状态很常见&#xff0c;例如是否领取空投等&#xff0c;传统的写法mapping(uint256>bool)中一个slot只能存储一个账户的信息&#xff0c;在其他语言中&#xff0c;我们经常会用到bitmap来表示标志位&#xff0c;如果我们可以将bi…

银行卡三要素验证如何用Java进行调用

一、什么是银行卡三要素验证&#xff1f; 银行卡三要素验证又叫银行卡三要素核验、银行卡三要素校验、银行卡实名认证、银行卡三元素验证&#xff0c;即输入银行卡卡号、姓名、身份证号码&#xff0c;验证此三要素是否一致&#xff0c;该接口支持所有带银联标识的银行卡。 二…

langchain入门系列之五 初探代理

代理的核心思想是使用LLM来选择要采取的一系列动作。 在链式结构中&#xff0c;一系列动作是硬编码的&#xff08;在代码中&#xff09;。 在代理中&#xff0c;使用语言模型作为推理引擎来确定要采取的动作及其顺序。 代理 这是负责决定下一步采取什么动作的类。 这是由语言…

lidar3607.2 lidar360mls7.2 强大的雷达点云数据处理应用软件

1、LiDAR360是一款强大的激光雷达点云数据处理和分析平台&#xff0c;拥有超过10种先进的点云数据处理算法&#xff0c;可同时处理超过300G点云数据。平台包含丰富的编辑工具和自动航带拼接功能&#xff0c;可为地形、林业、矿山和电力行业&#xff08;参考LiPowerline软件&…

【HarmonyOS 4.0】@BuilderParam 装饰器

1. BuilderParam 装饰器 BuilderParam 装饰器用于装饰自定义组件(struct)中的属性&#xff0c;其装饰的属性可作为一个UI结构的占位符&#xff0c;待创建该组件时&#xff0c;可通过参数为其传入具体的内容。参数必须满足俩个条件&#xff1a; 2.1 参数类型必须是个函数&#x…

前端使用canvas绘制简单工作流-react

效果图如下&#xff1a; 目前只做了绘制部分&#xff0c;绘制方式也比较简单&#xff0c;点击工具栏中需要绘制的图形&#xff0c;在画布上左键点击将会绘制一个图形出来&#xff0c;工具栏选中第一个&#xff0c;再点击其他图像&#xff0c;长按鼠标左键可以移动&#xff0c;删…

丢掉Beyond Compare吧!新款文件差异对比工具WinMerge更具性价比!

今天想和大家分享一款非常实用的免费开源文件比较工具&#xff1a;WinMerge。 作为一名长期从事互联网行业的人&#xff0c;我经常需要处理大量的文档和代码文件&#xff0c;文件对比工具在我的日常工作中可谓是必不可少的“左膀右臂”。 也相信很多朋友在处理多个文档内容或者…

96页PPT集团战略解码会工具与操作流程

德勤集团在战略解码过程中通常会用到以下一些具体工具&#xff1a; 一、平衡计分卡&#xff08;Balanced Scorecard&#xff09; 财务维度&#xff1a; 明确关键财务指标&#xff0c;如营业收入、利润、投资回报率等。你可以通过分析历史财务数据和行业趋势&#xff0c;确定…

HUSB381A:带线PD适配器的绝佳选择

HUSB381A是慧能泰半导体全新推出的一款采用SOP8封装&#xff0c;集成MOS的USB PD Source芯片&#xff0c;带CC1和CC2引脚&#xff0c;支持不可分离线缆&#xff08;Captive Cable&#xff09;PD适配器和纯PD快充充电器应用。HUSB381A支持最大功率20V5A 100W应用&#xff0c;支持…

单片机驱动彩屏最简方案:单片机_RA8889最小开发板驱动控制TFT彩屏介绍(一)方案架构

本文介绍使用单片机RA8889来驱动和控制彩屏的最小方案。文章从RA8889的架构功能、硬件电路设计及软件设计三个方面来说明。 小编已发布多篇文章介绍了单片机RA8889来驱动控制彩屏&#xff0c;但是仍有不少单片机玩家可能对驱动彩屏还不算熟悉&#xff0c;在此加推一个短篇介绍…

审计发现 FBI 的数据存储管理存在重大漏洞

据The Hacker News消息&#xff0c;美国司法部监察长办公室 &#xff08;OIG&#xff09; 的一项审计发现&#xff0c; FBI 在库存管理和处置涉及机密数据的电子存储媒体方面存在“重大漏洞”。 OIG 的审计显示&#xff0c;FBI 对包含敏感但未分类 &#xff08;SBU&#xff09…

橙子投屏,轻松连接大屏幕

对于某腾、某爱、某酷投屏大家在熟悉不过了吧&#xff0c;一款非常好用的投屏软件&#xff0c;但是使用起来还是限制颇多&#xff0c;比如有犷郜&#xff0c;还必须同步使用手机App才能实现投屏功能&#xff0c;关键还得开会员&#xff0c;劝退不少小伙伴。但是现在手机往往占据…

API代理指南:跨境业务的数据桥梁

在当今全球化的经济环境中&#xff0c;跨境业务已成为企业拓展国际市场、实现业务增长的重要途径。但面临着法律法规差异、网络复杂性和数据安全等诸多挑战。为了有效应对这些挑战&#xff0c;API&#xff08;应用程序编程接口&#xff09;代理成为了跨境业务中不可或缺的一部分…