Ответ Джерси: не устанавливайте заголовок 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?