報文壓縮的使用場景:當數據大於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
二者配其一即可。