簡體   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