J'utilise un caractère spécial HTML "amusant" (✰) (voir http://html5boilerplate.com/ pour plus d'informations) pour un Server
en-tête HTTP et je me demande s'il est "autorisé" par spécification.
En utilisant l'onglet Réseau dans les outils de développement de Chrome sur Windows Xp Pro SP 3, je vois le ✰ très bien.
Dans IE8, le ✰ n'est pas rendu correctement.
Le w3.org validateur HTML ne pas rendu correctement (affiche «
â°
» au lieu).
Maintenant, je n'aime pas trop les encodages de caractères ... et franchement je ne m'en soucie pas trop; J'utilise juste aveuglément UTF-8 car on me dit de le faire. :-)
La disparité est-elle causée par des bogues dans les différents analyseurs / navigateurs / moteurs / (quel que soit leur nom)?
Y a-t-il une spécification pour cela ou peut-être une liste de caractères autorisés pour une "valeur" d'en-tête HTTP?
la source
Réponses:
En bref: seul l'ASCII est garanti de fonctionner. Certains octets non ASCII sont autorisés pour la compatibilité ascendante, mais ne sont pas censés être affichables.
HTTPbis a abandonné et a précisé que dans les en-têtes, il n'y avait pas de codage utile en dehors de l'ASCII:
Auparavant, la RFC 2616 de 1999 définissait ceci:
et RFC 2047 est le codage MIME , donc ce serait:
mais je ne pense pas que de nombreux clients (le cas échéant) le soutiennent.
la source
Veuillez d'abord lire les commentaires, cette réponse tire probablement de fausses conclusions des bonnes sources, doit être modifiée.
Vous pouvez utiliser n'importe quel caractère ASCII imprimable, et aucun caractère spécial comme ✰ (qui n'est pas ASCII )
Astuce : vous pouvez tout encoder en JSON.
Edit : peut ne pas être évident au début, le codage de caractères défini dans l'en-tête ne s'applique que pour le corps de la réponse, pas pour l'en-tête lui-même. (Comme cela causerait un problème de poulet et d'oeuf.)
Je voudrais résumer toutes les définitions pertinentes selon les spécifications liées par Penchant.
Donc, nous sommes après field-value .
LWS signifie Linear White Space. Essentiellement, LWS est un espace ou une tabulation, mais vous pouvez diviser la valeur de votre champ en plusieurs lignes en commençant une nouvelle ligne avant un espace ou une tabulation.
Simplifions-le à ceci:
Maintenant, nous sommes après le contenu du champ .
TEXT est le plus général et inclut tout le reste - oubliez donc le reste -. Voici le jeu de caractères US-ASCII (= ASCII)
Comme vous pouvez le voir, tous les caractères ASCII imprimables sont autorisés.
la source
OCTET
s, et SinceTEXT
est n'importe lequelOCTET
sauf0 - 31
, cela signifie que tous lesOCTET
s de32
à255
sont autorisés . Les octets de ✰ sont226
,156
et176
et trois d'entre eux sont autorisés, donc ✰ est autorisé selon les passages que vous avez cités.CTLs
"? Est -ce que cela veut dire les caractèresCR
,LF
sont autorisés? Ou cela signifie-t-il que seule la séquence continue "CR
LF
SP
/HT
" est autorisée? (En d' autres termes, peut - tête des valeurs contiennent unCR
ouLF
ou lesHT
valeurs d' en- tête peut contenir les caractères?CR
,LF
EtHT
dans l'ordre et le montant?)