報文壓縮的使用場景:當數據大於1kb時,我在使用該方式進行傳輸,當數據比較小的時候使用gzip的話成本比較大,原本數據量不大,沒有必要。算法
GZIP: 一種壓縮算法,通常壓縮比例大概在6-8之間spring
HTTP GZIP:Http協議中的gzip壓縮算法,除了gzip外http協議裏還支持一些其餘的算法,好比compress/deflate。固然也能夠定製本身的壓縮算法,前提是客戶端支持。
壓縮的好處是能夠節約帶寬/流量,可是帶來的代價是額外的cpu/內存資源消耗,不過在現在性能過剩的時代,這些遠遠沒有帶寬寶貴。json
tomcat做爲servet容器+http server,天然是支持gzip壓縮的,只是在embed版本下須要經過代碼來配置。tomcat
spring-boot內置的tomcat是embed版本,經過內置的autoconfig機制已經作了一些默認tomcat配置,可是對於一些不經常使用/高級的配置,spring-boot並無提供入口。springboot
不過因爲spring bean的特性,能夠覆蓋默認裝配的bean,包括tomcat相關的配置。TomcatServletWebServerFactory是springboot2.0.2下對tomcat embed的配置封裝,覆蓋此bean便可實現動態配置(不要問我怎麼知道這個類的,看源碼……)app
本次增長gzip壓縮是爲了解決客服部門的使用問題,雖然解決了問題可是治標不治本。spring-boot
只需在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/jsonspa
兩者配其一便可。code