报文压缩的使用场景:当数据大于1kb时,我在使用该方式进行传输,当数据比较小的时候使用gzip的话成本比较大,本来数据量不大,没有必要。

GZIP: 一种压缩算法,一般压缩比例大概在6-8之间

HTTP GZIP:Http协议中的gzip压缩算法,除了gzip外http协议里还支持一些其他的算法,比如compress/deflate。当然也可以定制自己的压缩算法,前提是客户端支持。
压缩的好处是可以节约带宽/流量,但是带来的代价是额外的cpu/内存资源消耗,不过在如今性能过剩的时代,这些远远没有带宽宝贵。

tomcat作为servet容器+http server,自然是支持gzip压缩的,只是在embed版本下需要通过代码来配置。

spring-boot内置的tomcat是embed版本,通过内置的autoconfig机制已经做了一些默认tomcat配置,但是对于一些不常用/高级的配置,spring-boot并没有提供入口。

不过由于spring bean的特性,可以覆盖默认装配的bean,包括tomcat相关的配置。TomcatServletWebServerFactory是springboot2.0.2下对tomcat embed的配置封装,覆盖此bean即可实现动态配置(不要问我怎么知道这个类的,看源码……)

本次增加gzip压缩是为了解决客服部门的使用问题,虽然解决了问题但是治标不治本。

只需在WebAppConfigurer implements WebMvcConfigurer配置即可


@Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory(){
        TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory();
        tomcatServletWebServerFactory.addConnectorCustomizers((connector)->{
            ProtocolHandler protocolHandler = connector.getProtocolHandler();
            if(protocolHandler instanceof Http11NioProtocol){
                Http11NioProtocol http11NioProtocol = (Http11NioProtocol)protocolHandler;
                http11NioProtocol.setCompression("on");//default off
                http11NioProtocol.setCompressionMinSize(2048);//default 2048(B)
                http11NioProtocol.setMaxKeepAliveRequests(1);//default 200
            }
        });
        return tomcatServletWebServerFactory;
    }

 

yml配置人如下

server:
  compression:
    enabled: true
    min-response-size: 1024
    mime-types:
       application/json

 

二者配其一即可。

 posted on 2019-11-06 19:30  sunnyBalckCat  阅读(2276)  评论(0编辑  收藏  举报