Большой текстовый ввод приводит к сбою http post

#html #forms

#HTML #формы

Вопрос:

В моем приложении есть форма, в которую технические специалисты вводят информацию о различных событиях или предпринятых действиях (например, обновлении сервера). Проблема в том, что эти входные данные могут быть довольно длинными, а затем моя форма перестает работать. Сервер возвращает браузеру ошибку 302, если браузеры пытаются отправить данные, но так же часто браузер ничего не делает, когда я пытаюсь отправить. Когда браузер ничего не делает, быстрый просмотр в инструментах разработчика Chrome показывает, что браузер пытается выполнить post по правильному пути, но статус указан как сбой. Это всегда происходит, если текстовое поле содержит более ~ 3500 символов. Я попытался изменить enctype, чтобы посмотреть, что произойдет, но это не решило проблему.

 <form enctype="application/x-www-form-urlencoded" action="/some/path/" method="post" _lpchecked="1">
<fieldset>
    <input type="hidden" name="machineId" value="some_integer">
    <input type="hidden" name="eventId" value="some_integer">
    Titel:
    <select name="form[title]">
        <option>Some_option</option>
        <option>some_option</option>
    </select>

    <textarea name="form[text]" rows="25" cols="90"></textarea>
    <input type="submit" value="Spara" title="Spara">
</fieldset>
</form>
  

Есть идеи о том, почему это не работает и что можно сделать?

РЕДАКТИРОВАТЬ: мое приложение основано на PHP и работает на Debian / Apache. Я не смог найти никаких настроек, которые могли бы помешать корректной работе post. У меня есть значение post_max_size, равное 8 МБ, но размер текста из 3500 символов не превышает 8 МБ…

Комментарии:

1. Случайно, на вашем сервере установлен максимальный размер post? Может быть превышен максимальный порог post-сайта, что приводит к его отказу. (Кроме того, попробуйте использовать multipart/form-data в качестве формы enctype и посмотреть, есть ли какие-либо изменения ( application/x-www-form-urlencoded значение по умолчанию enctype )

2. Я не смог найти на своем сервере никаких настроек, которые могли бы иметь такой эффект, но если вы можете дать мне подсказку о том, что искать, я проверю еще раз. Я использую Debian / Apache. Я также пробовал несколько разных типов, но все они дают одинаковый результат

Ответ №1:

Ваш текст через POST , скорее всего, НЕ будет 1 байт / символ. Apache mod_security может фильтровать данные. И это может быть любое другое количество модов Apache, которые влияют на шифрование post. Вы можете проверить mb_get_info() и другие функции mb_ *, чтобы проверить, как PHP кодирует текст. Если вы не хотите копать слишком глубоко, вы можете сделать обоснованное предположение из пары точек данных о том, сколько байтов на символ используется в вашем сообщении, и настроить post_max_size его в соответствии с вашими потребностями.

Если вы не можете выводить ошибки на экран, вы можете проверить

tail -n 30 /var/log/apache2/error.log #prints last 30 lines of error.log

сразу после появления симптома белого экрана, чтобы получить более подробную информацию об ошибках / предупреждениях / etc, возникающих во время выполнения скрипта.

Также обратите внимание, что post_max_size это ограничено memory_limit … Я не думаю, что это проблема, но это может быть что-то, что следует учитывать другому читателю.

Комментарии:

1. В журнале apache я обнаружил, что это «ошибка сегментации». На самом деле это не решает мою проблему, поскольку их сложно отследить, но вы дали мне ответ, так что спасибо вам.

Ответ №2:

какой язык на стороне сервера вы используете? возможно, вам нужно некоторое сжатие текста, подобное этому алгоритму Хаффмана

Комментарии:

1. Извините, полностью пропустил эту информацию. Я использую PHP 5.2.6