我正在编写一个REST服务,我发送的JSON响应大小约为3MB。应用程序使用Scalatra Framework开发并在Tomcat服务器上运行。由于数据量很大,我想在通过网络发送到浏览器客户端之前压缩内容。
要压缩响应,我在tomcat server.xml文件中添加了以下代码:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
compression="on"
compressionMinSize="100"
noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/json,text/javascript,text/css,text/plain, application/javascript,application/xml,application/xml+xhtml,application/json"/>
但是在添加上述配置之前和之后,我没有发现任何不同的内容。它正在添加内容编码标头 Content-Encoding:gzip 。它没有解决我的实际目标。
要测试此配置是否真的有效,我已将JSON文件复制到服务器并尝试访问该文件。它在客户端作为小型压缩文件被接收。
似乎我错过了一些要添加的配置,以便将HTTP JSON响应压缩为压缩版。有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
我能够通过使用来自ehcache-web依赖的 GzipFilter 解决此问题。
在build.scala中添加了以下依赖项:
"org.slf4j" % "slf4j-jdk14" % "1.6.4",
"net.sf.ehcache" % "ehcache-web" % "2.0.4",
在web.xml中过滤映射
<filter>
<filter-class>net.sf.ehcache.constructs.web.filter.GzipFilter</filter-class>
<filter-name>GzipFilter</filter-name>
</filter>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/rest/*</url-pattern>
</filter-mapping>
以上代码更改已解决了我的问题。现在响应被压缩了。