У меня есть локальный сервер разработки, возвращающий статус 413 для загрузки файлов слишком большого размера, и клиент получает их немедленно - по мере необходимости.
Мой удаленный сервер - это та же версия Nginx и примерно такая же конфигурация, но 413 никогда не достигает браузера.
Ошибка, указывающая, что данные превышены по размеру, сразу появляется в журнале ошибок, и в журнале доступа ничего не отображается. Браузер продолжает отправлять данные, и через 30 секунд в журнале доступа (и снова в журнале ошибок) появляется статус 413, и время ожидания браузера прекращается с внутренней ошибкой «сброса соединения».
Какие конфигурации на удаленном сервере могут вызвать эту задержку?
Проблема в том, что большинство HTTP-клиентов не читают ответ, пока не отправят все тело запроса. Если вы имеете дело с веб-браузерами, вам, вероятно, здесь не повезло. Единственная конфигурация на стороне сервера, которую вы можете сделать, это установить keepalive_requests
до 0 (что отключает постоянные соединения), что может заставить nginx закрыть соединение после отправки 413, что должно заставить клиента прекратить отправку данных. Однако клиент, скорее всего, сообщит о сетевой ошибке вместо 413.
Я предполагаю, что браузер должен завершить загрузку и только после этого получить ошибку 413. Лучший способ проверить размер файла - проверить его в JS, прежде чем нажимать кнопку загрузки.