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