2.12.4. GZIP 压缩与解压缩
RESTEasy 支持 GZIP 压缩和解压缩。为了支持 GZIP 解压缩,客户端框架或 JAX-RS 服务会自动解压缩具有 gzip Content-Encoding 的消息正文,并且它可以自动将 Accept-Encoding 标头设置为 gzip,以便您不必手动设置此标头。若要支持 GZIP 压缩,如果客户端框架正在发送请求,或者服务器正在发送一个响应( Content-Encoding 标头设为 gzip ),RESTEasy 会压缩传出消息。您可以使用 @org.jboss.resteasy.annotation.GZIP 注释来设置 Content-Encoding 标头。
以下示例标记传出消息正文 进行 gzip 压缩的顺序。
示例:GZIP 压缩
@Path("/")
public interface MyProxy {
@Consumes("application/xml")
@PUT
public void put(@GZIP Order order);
}
示例:GZIP 压缩服务器响应标签
@Path("/")
public class MyService {
@GET
@Produces("application/xml")
@GZIP
public String getData() {...}
}
2.12.4.1. 配置 GZIP 压缩和解压缩 复制链接链接已复制到粘贴板!
RESTEasy 默认禁用 GZIP 压缩和解压缩,以防止对可能较大但已被攻击者压缩并发送到服务器的实体解压缩。
有三个与 GZIP 压缩和解压缩相关的拦截器:
-
org.jboss.resteasy.plugins.interceptors.GZIPDecodingInterceptor:如果Content-Encoding标头存在并且值为gzip,GZIPDecodingInterceptor将安装解压缩邮件正文的输入流。 -
org.jboss.resteasy.plugins.interceptors.GZIPEncodingInterceptor:如果Content-Encoding标头存在并且值为gzip,GZIPEncodingInterceptor会安装压缩邮件正文的输出流。 org.jboss.resteasy.plugins.interceptors.AcceptEncodingGZIPFilter:如果Accept-Encoding标头不存在,AcceptEncodingGZIPFilter会添加值为gzip 的标头。如果Accept-EncodingAccept-Encoding标头存在但不包含gzip,AcceptEncodingGZIPFilter拦截器将附加该值gzip。注意启用 GZIP 压缩或解压缩并不依赖于
AcceptEncodingGZIPFilter拦截器的存在性。
启用 GZIP 解压缩器可以为从压缩消息正文中提取的 GZIPDecodingInterceptor 的字节数设置上限。默认限值为 10,000,000。