Допустимо ли сервер отправлять HTTP-ответ до получения всего запроса?

Рассмотрим большой HTTP-запрос:

POST /upload HTTP/1.1 Content-Type: multipart/form-data Content-Length: 1048576 ... 

Теперь клиент начинает загружать мегабайт данных, что может занять некоторое время. Тем не менее, сервер определяет, что HTTP-авторизация необходима, поэтому он решает, что будет отвечать HTTP 401 Unauthorized .

ДОЛЖЕН, чтобы сервер подождал, пока он не получит весь запрос (IE, заголовки + CRLF CRLF + байты Content-Length ), прежде чем он сможет ответить?

С практической точки зрения, такое поведение нарушит любые браузеры? В любом случае браузеры продолжают загружать файл, или они перестанут передавать, если они получат «преждевременный» ответ?

Что еще более важно, в этом случае они смогут успешно пройти аутентификацию и начать загрузку снова (с учетными данными), или это ненадежно отключить загрузку, как это?

Рассматривая RFC 2616, который определяет протокол, в Разделе 8.2.2 «Мониторинг подключений для сообщений о статусе ошибок», он указывает

Клиент HTTP / 1.1 (или более поздний), отправляющий тело сообщения, ДОЛЖЕН отслеживать сетевое соединение для состояния ошибки, пока он передает запрос. Если клиент видит состояние ошибки, он ДОЛЖЕН немедленно прекратить передачу тела.

Поэтому я бы сказал, что вы можете перепрыгнуть по ошибке 401. А затем посмотрев 10.4.2 401 Несанкционированный

Запрос требует аутентификации пользователя. Ответ ДОЛЖЕН включать поле заголовка WWW-Authenticate (раздел 14.47), содержащее вызов, применимый к запрашиваемому ресурсу. Клиент МОЖЕТ повторить запрос с подходящим полем заголовка авторизации

Указывает, что клиент может повторить попытку с подходящими учетными данными.

Я не проводил никаких экспериментов, чтобы увидеть, как работают браузеры.

  • Как перенаправить URL браузера пользователя на другую страницу в Nodejs?
  • Отправить запрос POST с данными, указанными в файле через Curl
  • Быстрая загрузка HTTP
  • Как я могу прочитать выходной stream HttpServletReponses?
  • CORS. Какова мотивация внедрения предполетных запросов?
  • Запрос HTTP-клиента Java с заданным таймаутом
  • «ПРЕДУПРЕЖДЕНИЕ: предварительные заголовки отображаются» в отладчике Chrome
  • Когда следует использовать метод GET или POST? В чем разница между ними?
  • Использование WebClient в C # есть способ получить URL-адрес сайта после перенаправления?
  • Ошибки консоли. Не удалось загрузить ресурс: net :: ERR_INSECURE_RESPONSE
  • Проблема с использованием NSURLRequest для данных POST на сервер
  • Давайте будем гением компьютера.