Ограничение размера поля HTTP-запроса (POST) и запрос.Двоичное чтение в JSP

StackOverflow https://stackoverflow.com/questions/1826524

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение 2

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top