【问题标题】:Understanding Gzip Compression in Spring Boot ,Angular Java Application了解 Spring Boot 中的 Gzip 压缩,Angular Java 应用程序
【发布时间】: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")之后)

  1. 除上述之外,还有待处理的事情? --> 使用 java.util.zip.GZIPOutputStream 显式压缩响应,或者当我启用像httpProtocol.setCompression("on"); 这样的压缩时,spring boot 会自动处理? --> 需要创建一个 servlet 过滤器吗?

底线是:我不清楚“plain servlet 实现方式”和“spring boot”实现方式之间的关系。

在 Spring Boot 上下文中,谁能列出需要和不需要的步骤?

【问题讨论】:

    标签: java angularjs spring compression gzip


    【解决方案1】:

    我没有在 Spring Boot 1.2 中进行测试,但是在 Spring Boot 1.3 中要为 REST 响应启用压缩,您需要在 application.properties 中启用压缩:

    server.compression.enabled=true
    server.compression.mime-types=application/json,application/xml,application/javascript,text/html,text/xml,text/plain
    

    此后所有可缓存的(不是POSTPUT 等)请求,大于server.compression.min-response-size,都将被压缩。

    附言

    作为响应 Using GZIP compression with Spring Boot/MVC/JavaConfig with RESTful 存在用于在 Spring Boot 1.2 中启用压缩的配置:

    server.tomcat.compression: on
    server.tomcat.compressableMimeTypes=application/json,application/xml,text/html,text/xml,text/plain
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-12
      • 2020-10-05
      • 2021-06-03
      • 2010-10-12
      • 2021-09-15
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多