Подтвердить что ты не робот

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

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

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

...

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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