Я заметил проблему с веб-приложением, из-за которого код нашего приложения, который обрабатывает загрузку файлов, периодически сталкивался с ошибкой загрузки файла 3. Я не был уверен, как наши пользователи вызывали эту ошибку, но я знаю, что те, кто это делал, будут загружать файлы через нестабильное или медленное интернет-соединение (мобильные точки доступа, общедоступный Wi-Fi и т. д.). Поэтому я проверил это, используя функцию регулирования Chrome Dev Tools (быстрый 3g) и загрузив файл размером 10 МБ, который может занять около минуты или более. Мы используем библиотеку Dropzonejs для обработки загрузок, кстати, без разбивки на части. Ровно через 22 - 23 секунды соединение всегда прерывается, но Apache продолжает обрабатывать неполное тело запроса и передает его в PHP, что приводит к частичной ошибке загрузки.
Я не могу понять, из-за чего это произошло. В конфигурации PHP для max_execution_time и max_input_time установлены значения 0 и -1 соответственно. Максимальные размеры записей и загрузки установлены относительно хорошо, размер загрузки файлов даже не имеет значения. Если запрос на загрузку занимает более 22–23 секунд, проблема возникает. Я попытался отключить mod_reqtimeout, и это не имело никакого значения. Другие вещи, которые я пробовал, - возиться со значением таймаута apache и отключить keepalive, и он по-прежнему вызывает проблемы чуть позже, чем через 20 секунд (это время появляется на вкладке сети браузера).
Я не вижу ничего в журналах ошибок apache, и журналы доступа делают эти запросы правдоподобными, поскольку apache продолжает обрабатывать неполный запрос, как обычно.
Сначала я подумал, что это может быть dropzonejs, убивающее соединение с запросом ajax, но я также протестировал тот же код в моей локальной среде разработки, в которой используется laradock (версии программного обеспечения будут немного отличаться. Все же и apache 2.4 и php 7.2), и я не могу повторить проблему, чтобы она не могла быть проблемой на стороне клиента.