Отключить chunking для запроса - PullRequest
2 голосов
/ 29 сентября 2011

У меня есть веб-сервис, поддерживаемый сервлетом Java. Служба используется более старой версией Flash. Мы обнаружили, что в этой версии Flash URLLoader не будет работать с частями. Любой фрагментарный ответ никогда не получен с сервера.

Я использую Glassfish для размещения сервлета. Я знаю, как отключить чанкинг для всего сервера, но это кажется плохой идеей (правда?).

Есть ли стандартный способ отключить разбиение на блоки для каждого запроса? Я попытался позвонить ServletResponse.setBufferSize(SOME_LARGE_VALUE), но удивительно, что это не повлияло на решение сервера использовать чанкинг.

1 Ответ

2 голосов
/ 29 сентября 2011

Из Javadoc из HttpServlet#doGet():

...

Где возможно, установите заголовок Content-Length (с помощью метода ServletResponse.setContentLength(int)), чтобы разрешить контейнеру сервлета использовать постоянное соединение для возврата своего ответа клиенту, что повышает производительность. Длина содержимого устанавливается автоматически, если весь ответ помещается в буфер ответа.

При использовании фрагментированной кодировки HTTP 1.1 (что означает, что ответ имеет заголовок Transfer-Encoding), не устанавливайте заголовок Content-Length.

...

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

response.setContentLength(contentLength);
// ...

Обновление : Вам также необходимо убедиться, что сервлет в свою очередь не был вызван <jsp:include> или RequestDispatcher#include(). См. Также его Javadoc :

...

Объект ServletResponse имеет элементы пути и параметры остаются неизменными по сравнению с объектом вызова. Включенный сервлет не может изменить код состояния ответа или установить заголовки; любая попытка внести изменения игнорируется.

...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...