HTTP GZIP——壓縮報文,節約帶寬


報文壓縮的使用場景:當數據大於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

 

二者配其一即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM