Jersey响应:如果已设置Transfer-Encoding,则不设置Content-Length标头

时间:2016-03-06 18:49:48

标签: java proxy jersey-2.0 content-length transfer-encoding

我有一个Jersey-Application代理对内部应用程序的请求,该应用程序应该不能直接访问。

@GET
@Path("/path")
public static Response get(
        @Context UriInfo uriinfo,
        @Context HttpHeaders httpHeaders,
        byte[] body
        ) throws Exception{

//call the internal application
Response response = get(url, uriinfo, httpHeaders, body, HttpMethod.GET);

ResponseBuilder rb = Response.
                status(response.getStatusCode()).
                entity(response.getResponseStream());

//set all headers from response
for(header : response.getResponseHeaders()){
    rb.header(...);
}

Response r = rb.build();
//checking headers here, does NOT contain any Content-Length header
return r;

在来自内部应用程序的响应中,有Transfer-Encoding = chunked标头集。到目前为止,这没问题。

现在,发送到客户端的响应还包含Content-Length标头集,大概是泽西本身在传出响应上。当我在将标题发送到客户端之前检查标题时,所有标题都设置正确,就像内部应用程序的响应一样。

Content-Length标头导致客户端无法正确解释响应,因为应设置Content-LengthTransfer-Encoding,如here所述。

如果我已经设置了Transfer-Encoding,如何阻止Jersey设置Content-Length标题?

0 个答案:

没有答案