Ответ Джерси: не устанавливайте заголовок Content-Length, если Transfer-Encoding уже установлен

У меня есть приложение Джерси, которое передает запрос на внутреннее приложение, которое должно быть вне прямого доступа.

@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-Length или же Transfer-Encoding установить, как указано здесь.

Как я могу помешать Джерси установить Content-Length заголовок, если у меня уже есть набор Transfer-Encoding?

0 ответов

Другие вопросы по тегам