【问题标题】:GZip compression of REST responseREST 响应的 GZip 压缩
【发布时间】:2014-02-20 22:52:38
【问题描述】:

我正在编写一个 REST 服务,我正在发送一个大小约为 3MB 的 JSON 响应。应用程序使用 Scalatra 框架开发并在 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 响应压缩为一个。有人可以帮我解决这个问题吗?

【问题讨论】:

标签: java json rest tomcat gzip


【解决方案1】:

我能够通过使用来自 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>

以上代码更改解决了我的问题。现在响应被压缩了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2011-07-13
    • 2012-08-21
    相关资源
    最近更新 更多