【发布时间】:2016-02-16 00:49:41
【问题描述】:
我正在使用 Spring Boot (v 1.2) 和 AngularJS 应用程序。我正在尝试在我们的应用程序中实现 GZip 压缩以提高性能。
我想压缩我的 JSON 响应。 我已经做了什么......
1.在tomcat(嵌入spring boot)中启用压缩,如下所示。 参考:Stackoverflow...Using GZIP compression with Spring Boot/MVC/JavaConfig with RESTful 和 spring 文档...https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html#how-to-enable-http-response-compression
@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);
}
}
);
}
};
}
现在,我的响应标头中缺少 content-encoding:gzip。
所以上面的代码到目前为止没有影响。
我的问题是...
1. spring如何设置“content-encoding:gzip”?
-> 我在 httpservletresponse.addHeader("content-encoding","gzip") 之类的 spring 控制器中尝试过
但是,这一次,浏览器的响应体是空的(在添加..httpservletresponse.addHeader("content-encoding","gzip")之后)
- 除上述之外,还有待处理的事情?
--> 使用 java.util.zip.GZIPOutputStream 显式压缩响应,或者当我启用像
httpProtocol.setCompression("on");这样的压缩时,spring boot 会自动处理? --> 需要创建一个 servlet 过滤器吗?
底线是:我不清楚“plain servlet 实现方式”和“spring boot”实现方式之间的关系。
在 Spring Boot 上下文中,谁能列出需要和不需要的步骤?
【问题讨论】:
标签: java angularjs spring compression gzip