繁体   English   中英

如何在没有xml的Spring MVC中启用REST gzip压缩?

[英]How to enable REST gzip compression in Spring MVC without xml?

有一些过滤器,但没有工作的Java解决方案或一些有用的库。 我正在使用Spring MVC和Tomcat,并将发布部署到Heroku(因此无法更改servlet容器配置)。 如何在没有XML的情况下在Spring MVC中启用REST gzip压缩?

您可以设置在servlet容器上使用压缩的规则,例如apache-tomcat,您可以使用compression属性。 来自文档

压缩

连接器可以使用HTTP / 1.1 GZIP压缩以尝试节省服务器带宽。 参数的可接受值是“off”(禁用压缩),“on”(允许压缩,导致文本数据被压缩),“force”(在所有情况下强制压缩)或数字整数值(这是等效于“on”,但指定压缩输出之前的最小数据量)。 如果内容长度未知且压缩设置为“on”或更具攻击性,则输出也将被压缩。 如果未指定,则将此属性设置为“off”。

注意:在使用压缩(节省带宽)和使用sendfile功能(节省CPU周期)之间需要权衡。 如果连接器支持sendfile功能,例如NIO连接器,则使用sendfile将优先于压缩。 症状将是静态文件大于48 Kb将被解压缩。 您可以通过设置连接器的useSendfile属性来关闭sendfile,如下所述,或者更改默认conf / web.xml或Web应用程序的web.xml中DefaultServlet配置中的sendfile使用率阈值。

compressionMinSize

如果压缩设置为“on”,则此属性可用于指定压缩输出之前的最小数据量。 如果未指定,则此属性默认为“2048”。

一种选择是更改为Spring Boot并使用嵌入式Tomcat。 然后你可以使用Andy Wilkinson和我自己在这个问题的答案中建议的ConfigurableEmbeddedServletContainer

@Bean
public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
    return new EmbeddedServletContainerCustomizer() {
        @Override
        public void customize(ConfigurableEmbeddedServletContainer servletContainer) {
            ((TomcatEmbeddedServletContainerFactory) servletContainer).addConnectorCustomizers(
                    new TomcatConnectorCustomizer() {
                        @Override
                        public void customize(Connector connector) {
                            AbstractHttp11Protocol httpProtocol = (AbstractHttp11Protocol) connector.getProtocolHandler();
                            httpProtocol.setCompression("on");
                            httpProtocol.setCompressionMinSize(256);
                            String mimeTypes = httpProtocol.getCompressableMimeTypes();
                            String mimeTypesWithJson = mimeTypes + "," + MediaType.APPLICATION_JSON_VALUE;
                            httpProtocol.setCompressableMimeTypes(mimeTypesWithJson);
                        }
                    }
            );
        }
    };
}

如果您选择切换到Spring Boot,那么在Spring Boot参考文档中有一个关于Heroku部署的特定章节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM