RFC 7230 , la parte rilevante della versione attuale della specifica, è abbastanza chiaro e al punto:
3. Message Format
[…]
A recipient MUST parse an HTTP message as a sequence of octets in an encoding that is a superset of US-ASCII*. Parsing an HTTP message as a stream of Unicode characters, without regard for the specific encoding, creates security vulnerabilities due to the varying ways that string processing libraries handle invalid multibyte character sequences that contain the octet LF (%x0A).
Ciò consente (almeno) di usare un parser UTF-8 conforme, poiché UTF-8 evita di codificare caratteri di sottoinsieme ASCII confusi nelle sue unità di codice multibyte, quindi ad es. %x0A
verrà sempre riconosciuto correttamente come un carattere LF effettivo.
C'è un'altra nota che, dopo aver analizzato con successo il messaggio di base nelle sue coppie chiave-valore intestazione più il corpo del messaggio, puoi iniziare l'analisi dei pezzi con un approccio più rilassato o non predefinito, secondo alcune intestazioni . Ciò è particolarmente utile con l'intestazione Content-Type di RFC 7231 :
3.1.1.1. Media Type
HTTP uses Internet media types [RFC2046] in the Content-Type (Section 3.1.1.5) and Accept (Section 5.3.2) header fields in order to provide open and extensible data typing and type negotiation.
L'RFC2046 si occupa di estendere MIME ai corpi dei messaggi e ha a sua volta una bella sezione chiara su il parametro Charset :
4.1.2. Charset Parameter
A critical parameter that may be specified in the Content-Type field for "text/plain" data is the character set. This is specified with a "charset" parameter, as in:
Content-type: text/plain; charset=iso-8859-1
Continua spiegando che altri tipi di file text/
dovrebbero usare la stessa semantica charset.
Tieni presente che Content-Encoding
, Transfer-Encoding
e Content-Transfer-Encoding
(obsoleto) si riferiscono a un insieme molto limitato di codifiche per set di caratteri di compressione o chunking - non .
* American National Standards Institute, "Coded Character Set - 7-bit American Standard Code for Information Interchange", ANSI X3.4, 1986.