È un'applicazione HTTP che invia un Content-Length o Transfer-Encoding con 204 No response contenuti rotto?
-
06-09-2019 - |
Domanda
Non riesco a dire da RFC 2616 se un client HTTP dovrebbe accettare un 204 No response contenuti che include Content-Length: 0 o Transfer-Encoding: chunked intestazioni. Queste intestazioni sembrano rompere alcune client HTTP e proxy, che a quanto pare tentano di leggere il corpo risposta vuota, ma la specifica legge :
- Ogni messaggio di risposta che "NON DEVE" includere un messaggio-corpo (come il 1xx, 204, e 304 risposte e qualsiasi risposta ad una richiesta HEAD) è sempre terminata dal primo vuoto riga dopo i campi di intestazione, indipendentemente campi entità-intestazione presente nel messaggio.
Per me "a prescindere dai campi di entità-header" implica che i clienti dovrebbero tollerare questo stato di cose. Il Erlang HTTP biblioteca scelto questa interpretazione. Tuttavia, LightHTTPD e IBM ha scelto l'interpretazione opposta -. che il server non dovrebbe includere queste intestazioni per le risposte che sono vietate dal dover corpi
Quindi, se l'applicazione web rimuovere quelle intestazioni dalla risposta, o dovrebbe l'infrastruttura di rete e client tollerare queste intestazioni su 204 No Content, 304 Not Modified, ecc?
Soluzione
Secondo la RFC7230 (consulta http://tools.ietf.org /html/rfc7230#section-3.3.1 ) alla fine della pagina 29 si legge:
Un server non deve inviare un campo di intestazione Transfer-Encoding in qualsiasi di risposta con un codice di stato di 1xx (Informativo) o 204 (No Content).
Pertanto l'applicazione web non deve inviare tali intestazioni con la risposta.
Altri suggerimenti
Non posso dirvi ciò che è corretto, nel senso che io non conosco il protocollo HTTP in quel dettaglio.
Tuttavia, è arrivata a chiedere a te stesso:
- Posso cambiare la mia applicazione per rimuovere quelle intestazioni?
- o posso cambiare i consumatori della mia applicazione di ignorare queste intestazioni?
A mio parere, l'applicazione non deve inviare tali intestazioni in quel caso.