我正在 Jersey 2 中编写 RESTful Web 服务。我想支持响应的 Gzip 编码。下列的这个答案,我启用了org.glassfish.jersey.server.filter.EncodingFilter
in my ResourceConfig
class.
public class MyWebService extends ResourceConfig {
public MyWebService() {
register(EncodingFilter.class);
register(GZipEncoder.class);
register(DeflateEncoder.class);
}
}
在我的资源类上,我返回javax.ws.rs.core.Response
object.
@GET
@Path("api/configs")
public Response listConfigs() throws Exception {
List<UserConfig> configs = configService.getAll();
return Response.ok().entity(configs).build();
}
现在,当我点击此 api 时,我会收到响应,但响应标头不包含Content-Encoding
标头,而是包含Transfer-Encoding: chunked
.
Request:
> GET /api/configs HTTP/1.1
> Accept-Encoding: gzip
回复:
> HTTP/1.1 200
> Transfer-Encoding: chunked
* Received 14.8 KB chunk
* Received 504 B chunk
* Received 15.2 KB chunk
* Received 506 B chunk
* Received 15.1 KB chunk
* Received 514 B chunk
没有Content-Encoding: gzip
响应中的标头,也没有任何Content-Length
header.
我在用着Jersey 2.27
on Tomcat 9
.
我还缺少其他配置吗?如何获取这两个标头并以 gzip 压缩形式获取响应而不是接收分块响应?
Edit:我注意到,当我发送大文件(> 1000 KB)时,我会得到Content-Encoding: gzip
and Transfer-Encoding: chunked
标头。