2011-12-22 10 views
6

Ciò che mi confonde è la decodifica dell'intestazione HTTP valori.Analisi dei valori delle intestazioni HTTP: Quotazione, RFC 5987, MIME, ecc.

Esempio Header:
Some-Header: "quoted string?"; *utf-8'en'Weirdness

Può essere citato intestazione valore di? Che ne pensi della codifica di uno "? è ' un carattere preventivo valido? Qual è il significato di un punto e virgola (;)? Il parser del valore per un'intestazione HTTP può essere considerato un parser MIME?

Sto creando un proxy trasparente che deve gestire e modificare in modo trasparente molti campi di intestazione in-the-wild. Ecco perché ho bisogno di tanti dettagli sul formato.

risposta

8

È possibile quotare i valori di intestazione?

Se si intende la produzione di RFC 5987 parameter si applica alla parte principale del valore di intestazione, quindi no.

Some-Header: "foo"; bar*=utf-8'en'bof 

Qui la parte principale del valore di intestazione sarebbe probabilmente "foo" comprese le virgolette, ma ...

Qual è il significato di un punto e virgola (;)?

La gestione specifica è definita separatamente per ciascuna intestazione denominata. Quindi, punto e virgola è significativo per, ad esempio, Content-Disposition, ma non per Content-Length.

Ovviamente questa non è una soluzione molto soddisfacente ma è quello con cui siamo bloccati.

Sto facendo un proxy trasparente che deve gestire in modo trasparente e modificare molti campi di intestazione in-the-wild.

Non è possibile gestirli in modo generico, è necessario conoscere la forma di ogni intestazione possibile. Per tutto ciò che non riconosci, non tentare di decomporre il valore dell'intestazione; e davvero, così poco là fuori supporta la RFC 5987 al momento, è improbabile che tu possa essere in grado di gestirlo in modo molto utile.

Lo status quo oggi è che i caratteri non ASCII nei valori di intestazione non funzionano a sufficienza per poter essere utilizzati cross-browser, sia codificati sia grezzi.

Fortunatamente sono raramente necessari. L'unico caso d'uso molto comune è il nome file non ASCII per Content-Disposition ma è più facile aggirare mettendo il nome del file in una parte del percorso URL finale.

Il parser del valore per un'intestazione HTTP può essere considerato un parser MIME?

No. HTTP prende in prestito pesantemente MIME e la famiglia di standard RFC 822 in generale, ma non fa parte della famiglia 822.Ha una propria grammatica di basso livello per intestazioni che assomiglia a 822, ma non è del tutto compatibile. Le funzioni MIME arbitrarie non possono essere utilizzate in HTTP, deve esserci un meccanismo di standardizzazione per trascinarle esplicitamente in HTTP, che è RFC 5987 per (parti di) RFC 2231.

(Vedere la sezione 19.4 di RFC 2616 per la discussione di alcune altre differenze.)

In teoria, un modulo di presentazione multipartè parte della famiglia 822 e si dovrebbe essere in grado di utilizzare RFC 2231 codifica lì. Ma la realtà è che i browser non supportano neanche questo.