Spring Boot可以为预压缩资产提供服务

时间:2018-01-13 06:36:59

标签: spring spring-boot

我想知道Spring或Spring Boot是否支持提供预压缩资源。

例如,nginx支持gzip_static on标志。 当客户端发送Accept-Encoding: gzip请求标头时,nginx会检查是否存在具有所请求名称和结尾“.gz”的文件。如果存在这样的文件,nginx会将其提供给客户端并节省一些CPU周期,因为它不必动态压缩它。

我可以使用Spring执行相同操作并将所有文件压缩到静态文件夹中,嵌入式Web服务器是否像nginx一样提供服务?

4 个答案:

答案 0 :(得分:0)

是的,您可以为特定资源及其mime类型配置gzip压缩。

如果您使用 application.yml 文件,它就是这样的:

server:
  compression:
    enabled: true
    mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript
    min-response-size: 2048

以下是 application.properties 文件的类似配置:

server.compression.enabled=true # If response compression is enabled.
server.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/javascript # Comma-separated list of MIME types that should be compressed.
server.compression.min-response-size=2048 # Minimum response size that is required for compression to be performed.

您可以使用server.compression.mime-types属性定义哪些资产必须压缩,在此示例中,我使用了Appendix A. Common application properties 中的一些默认值。

在这里,你可以看到一些没有压缩的演示Spring Boot应用程序的style.css(439 KB)文件:

enter image description here

这里是相同的文件,但启用了压缩(65.8 KB):

enter image description here

答案 1 :(得分:0)

Spring支持这个用例 org.springframework.web.servlet.resource.GzipResourceResolver

当客户端发送.gz标头时,此解析程序会搜索以Accept-Encoding: gzip结尾的文件。

这是在Spring 4.1中引入的。

您可以使用资源配置启用此解析程序:

@Configuration
class ResourceConfig implements WebMvcConfigurer {

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**")
            .addResourceLocations("classpath:/static/")
            .resourceChain(false).addResolver(new GzipResourceResolver());
  }
}

Spring Boot 1.4为gzip解析器添加了自动配置支持。将其添加到application.properties文件中,Spring Boot自动注册GzipResourceResolver

spring.resources.chain.gzipped=true

答案 2 :(得分:0)

据我所知,您没有这种可能性,但是您可以自己轻松地进行此操作。我认为这实际上应该在Tomcat或Jetty级别上实现。如果您实施了过滤器,请贡献力量,因为我也在寻找

答案 3 :(得分:0)

是的,可以。

此解决方案类似于JGrassini,但使用EncodedResourceResolver,您的应用程序将能够提供已压缩的.gz和.br文件:

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
            .setOrder(-1)
            .addResourceHandler("/**")
            .addResourceLocations("classpath:/where are your already compressed file to serve/")
            .resourceChain(true)
            .addResolver(new EncodedResourceResolver());
    }
}

您可以阅读以下内容:docs.spring.io