Ограничение размера поля HTTP-запроса (POST) и Request.BinaryRead в JSP - PullRequest
1 голос
/ 01 декабря 2009

Во-первых, у меня Java выше ржавого, и я никогда не делал JSP или сервлеты, но я пытаюсь помочь кому-то еще решить проблему.

Форма, представленная JavaScript, отправляется обратно в JSP. Некоторые из полей в этой форме имеют размер более 100 КБ. Однако при извлечении поля формы на стороне JSP значение поля усекается до 100 КБ.

Теперь я знаю, что в ASP Request.Form есть похожая проблема, которую можно обойти, используя Request.BinaryRead. Есть ли эквивалент в Java?

Или, в качестве альтернативы, в Websphere / Apache / IBM HTTP Server есть настройка, которая решает ту же проблему?

Ответы [ 3 ]

1 голос
/ 04 декабря 2009

Мы решили проблему. Как выяснилось, ничего общего с настройками веб-сервера и в сообщении ничего не урезали.

Поле формы перед публикацией разделялось на куски размером 102399 байт с помощью JavaScript, и каждый кусок добавлялся в поле формы в качестве значения, поэтому он заканчивался массивом значений. По-видимому, Request.Form () автоматически объединяет эти значения для воспроизведения одной гигантской строки, а Java getParameter () - нет. Использование getParameterValues ​​() и перестроение строки из возвращенных значений, однако, сделали свое дело.

1 голос
/ 01 декабря 2009

Поскольку отправленный запрос должен храниться в памяти контейнером сервлета, чтобы обеспечить функциональность, необходимую для API ServletRequest, большинство контейнеров сервлета имеют настраиваемый предел размера для предотвращения DoS-атак, поскольку в противном случае небольшое количество поддельных клиентов может спровоцировать серверу не хватило памяти.

Немного странно, если WebSphere безрезультатно обрезает запрос, вместо того, чтобы выполнить его неправильно, но если это является причиной вашей проблемы, вы можете найти параметры конфигурации здесь, в документации по WebSphere .

0 голосов
/ 02 декабря 2009

Вы можете использовать getInputStream (необработанные байты) или getReader (декодированные символьные данные) для чтения данных из запроса. Обратите внимание , как это взаимодействует с чтением параметров. Если вы не хотите использовать сервлет, обратите внимание на использование Filter to wrap запроса.

Я бы ожидал, что WebSphere отклонит запрос, а не произойдет произвольное усечение данных. Я подозреваю ошибку в другом месте.

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