È 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.