È accettabile che un server invii una risposta HTTP prima che sia stata ricevuta l’intera richiesta?

Prendi in considerazione una richiesta HTTP di grandi dimensioni:

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

Il client inizia ora a caricare un megabyte di dati, che potrebbe richiedere un po ‘di tempo. Tuttavia, il server determina che è necessaria l’authorization HTTP, quindi decide che risponderà con HTTP 401 Unauthorized .

DEVE il server attendere fino a quando non ha ricevuto l’intera richiesta (IE, intestazioni + CRLF CRLF + byte Content-Length ) prima che possa rispondere?

In termini pratici, tale comportamento interromperà qualsiasi browser? I browser continuano a caricare il file in ogni caso, o interromperanno la trasmissione se ricevono una risposta “prematura”?

Ancora più importante, in questo scenario, saranno in grado di autenticarsi con successo e ricominciare il caricamento (con credenziali), o è inaffidabile interrompere l’upload come questo?

Osservando RFC 2616 che definisce il protocollo, nella sezione 8.2.2 Monitoraggio delle connessioni per i messaggi di errore, si afferma

Un client HTTP / 1.1 (o successivo) che invia un messaggio-body DOVREBBE monitorare la connessione di rete per uno stato di errore mentre sta trasmettendo la richiesta. Se il cliente vede uno stato di errore, DOVREBBE immediatamente interrompere la trasmissione del corpo.

Quindi direi che puoi saltare in un errore send a 401. E poi guardando 10.4.2 401 non autorizzato

La richiesta richiede l’autenticazione dell’utente. La risposta DEVE includere un campo di intestazione Autenticato WWW (sezione 14.47) contenente una sfida applicabile alla risorsa richiesta. Il cliente PU MAY ripetere la richiesta con un campo di intestazione Autorizzazione adatto

Dichiara che il cliente può riprovare con credenziali adeguate.

Non ho eseguito alcun esperimento per vedere come i browser effettivamente eseguito comunque.