[英]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.