У меня есть сайт Joomla, и время от времени, когда я отправляю что-то через форму, я получаю ошибку HTTP 413:
Слишком большой объект запроса
Запрошенный ресурс /index.php не позволяет запрашивать данные с запросами POST, или количество данных, предоставленных в запросе, превышает предел емкости.
В файле error.log я получаю:
Недопустимая длина содержимого, ссылка: [сайт] /index.php
Похоже, это не имеет ничего общего с фактическим размером запроса по следующим причинам:
а) Я повозился с конфигурацией и Apache, и PHP. В Apache я пробовал увеличить LimitRequestBody, а в PHP post_max_size, max_input_vars, memory_limit и даже upload_max_filesize. Каждое значение намного превосходит то, что отправляется в типичном запросе, генерирующем ошибку.
б) Ошибка всплывает довольно случайно, и часто простое нажатие на кнопку «Обновить» позволяет мне пройти.
c) Я проверил запрос в Fiddler, чтобы убедиться, что все в порядке с длиной содержимого, указанной в заголовке, и с содержимым самого запроса. Вроде все в порядке. Любопытно, что когда я повторно отправляю тот же самый запрос через Fiddler, я никогда не получал ошибки. Кажется, я могу воссоздать его только через браузер.
Так что я здесь на грани остроумия. Даже не знаю, где искать проблему. Я не знаю, Apache это или PHP (хотя я ничего не могу найти в журналах ошибок PHP, так что, может быть, это означает, что Apache является более вероятным виновником?), Или PHP в целом, или мой сайт Joomla в частности (мои ставки были на Joomla, пока не воссоздал ошибку в тестовом сценарии с помощью очень простой формы публикации, хотя на сайте Joomla она появляется гораздо чаще).
Если кто-нибудь может дать какой-нибудь совет, с чего начать, буду очень признателен!
Хорошо, я думаю, что наконец-то добрался!
У меня возникли проблемы с настройкой wirehark на сервере, поэтому сначала я использовал apache LogFormat директива для регистрации количества байтов, поступающих в запрос, с параметром% I.
Я заметил, что когда я получил ошибку 413, сервер получил меньше байтов с запросом, чем когда он был обработан правильно. Затем я использовал mod_dumpio чтобы просмотреть весь запрос, и, конечно же, многое из него отсутствовало, когда я получал сообщение об ошибке. Кроме того, в журналах появлялся код 70007, что, насколько я понимаю, означает тайм-аут.
Поэтому я начал думать, что проблема может быть связана с моим подключением, а не с сервером. Я попросил некоторых людей протестировать сайт, но никто не сообщил о каких-либо проблемах, так что я предполагаю, что это все.
Так что, в конце концов, я думаю, здесь не на что смотреть, но, возможно, мой опыт спасет какую-нибудь бедную душу от стресса, через который я прошел.
Время вырваться Wireshark[.org]. Захватите фактический HTTP-запрос по сети, чтобы вы могли увидеть, что на самом деле составляет общий размер. Имейте в виду, что общий размер запроса, включая заголовки http (включая файлы cookie), может подтолкнуть вас к превышению лимита. Некоторые надстройки браузера или прокси могут добавлять к запросу.