为了账号安全,请及时绑定邮箱和手机立即绑定

泽西岛中的 GZip 编码

泽西岛中的 GZip 编码

侃侃尔雅 2022-09-07 20:55:35
我正在泽西岛2中编写RESTful网络服务。我想支持响应的Gzip编码。按照这个答案,我在课堂上启用了 。org.glassfish.jersey.server.filter.EncodingFilterResourceConfigpublic class MyWebService extends ResourceConfig {    public MyWebService() {        register(EncodingFilter.class);        register(GZipEncoder.class);        register(DeflateEncoder.class);    }}在我的资源类上,我返回一个对象。javax.ws.rs.core.Response@GET@Path("api/configs") public Response listConfigs() throws Exception {    List<UserConfig> configs = configService.getAll();    return Response.ok().entity(configs).build();}现在,当我点击此api时,我得到一个响应,但响应标头不包含标头,而是包含.Content-EncodingTransfer-Encoding: chunked请求:> 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: gzipContent-Length我正在使用 .Jersey 2.27Tomcat 9我是否缺少任何其他配置?如何获取这两个标头,并以 gzip 压缩而不是接收分块响应的形式获取响应?编辑:我注意到当我发送大文件(>1000 KB)时,我同时获得和标头。Content-Encoding: gzipTransfer-Encoding: chunked
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

是否使用或完全由容器自行决定。这取决于允许的缓冲区大小。Transfer-EncodingContent-Length


如果容器必须设置标头,则必须事先知道压缩响应的长度,因此,容器必须在内存中缓冲整个响应。Content-Length


对于泽西岛,内容长度缓冲区大小由 定义。缺省情况下,此值为 。ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER8192 bytes


你可以从你的类中轻松增加这个:MyWebService


public class MyWebService extends ResourceConfig {

    public MyWebService() {

        register(EncodingFilter.class);

        register(GZipEncoder.class);

        register(DeflateEncoder.class);


        ...


        property(ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER, 32768);


    }

}

希望这有帮助。


查看完整回答
反对 回复 2022-09-07
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信