Как код PHP может определить, что Apache решает вернуть HTTP-статус 400?

У меня есть клиент Javascript, который использует JQuery для отправки запросов Ajax POST в мой код PHP на общем сервере Hostgator. Почтовые данные представляют собой несколько сотен килобайт данных JSON, которые читаются с использованием file_get_contents('php://input'), Предел данных поста PHP сообщается как 64 МБ, и обычно все работает нормально.

Но каждые несколько дней код PHP вызывается с недопустимой строкой JSON, и клиент получает статус 400. Предположительно, этот статус приходит автоматически от Apache, так как мой код не делает ничего особенного для его отправки. Вчера я поместил код на место для регистрации данных поста, и это усеченный JSON длиной 196 269 … подозрительно чуть менее 3 * 64 КБ.

Похоже, что запрос усекается; Поскольку я вижу это только у одного из множества клиентов, я могу представить, что существует некоторая проблема с подключением к сети. Если это плохое заключение, я был бы рад, если бы кто-то поправил меня, но учтите, что это не то, о чем я спрашиваю.

Я не понимаю, почему в этом случае вызывается код PHP. Разве Apache не должен звонить, когда получен некорректный запрос? Это не возможно, что Apache запускает выполнение PHP до того, как будет получен полный запрос, включая данные постов, и не узнает, что существует проблема до тех пор, пока не будет запущен код PHP, не так ли? Если это ожидаемое поведение, как мой PHP-код может обнаружить, что это некорректный запрос? В настоящее время я полагаюсь на проверку ошибок из json_decode, но это кажется несовершенным, например, если данные были чем-то отличным от JSON. Я вставляю код для проверки http_response_code (), но мое чтение документации PHP заставляет меня подозревать, что это вернет 200:

Если код_ответа не указан, будет возвращен текущий код состояния. Оба этих значения по умолчанию будут иметь код состояния 200, если они используются в среде веб-сервера.

Я был бы рад просто указать на документацию Apache / PHP, которая описывает, как обрабатываются такие ошибки; мои поиски онлайн-документации не увенчались успехом.

Большое спасибо за любую помощь.

РЕДАКТИРОВАТЬ: меня попросили показать, что я отправляю данные; это как показано ниже. Но опять же, вопрос не в том, как ИЗБЕЖАТЬ ошибки (я вполне уверен, что это проблема с подключением), а в том, что происходит в НАЛИЧИИ ошибки.

  $.ajax({
url: myurl,
xhrFields: {'withCredentials': true}, // Send credentials to the server to allow CORS
dataType: 'json',
contentType: 'application/json; charset=utf-8',
type: 'POST', // Means that this changes server state (i.e. not cachable) and needed to send large amounts of data
data: JSON.stringify(dataToSend),
timeout: 120000,
async: true,
success: syncStepSucc,
error: syncAjaxErr
} );

РЕДАКТИРОВАТЬ: ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, что я пытаюсь понять взаимодействие между Apache и PHP, когда Apache получает искаженные / усеченные данные, и Apache решает вернуть HTTP-статус 400. Предел данных поста составляет 64 МБ, что значительно превышает 196 КБ, которые были получено.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]