Używam „zabawnego” specjalnego znaku HTML (✰) (zobacz http://html5boilerplate.com/, aby uzyskać więcej informacji) dla Server
nagłówka HTTP i zastanawiam się, czy jest on „dozwolony” według specyfikacji.
Korzystając z karty Sieć w narzędziach programistycznych w przeglądarce Chrome w systemie Windows Xp Pro SP 3, widzę ✰ w porządku.
W IE8 ✰ nie jest poprawnie renderowane.
Walidator HTML w3.org nie renderuje go poprawnie (
â°
zamiast tego wyświetla „ ”).
Otóż, nie przepadam za kodowaniem znaków… i szczerze mówiąc nie przejmuję się nimi zbytnio; Po prostu ślepo używam UTF-8, bo tak mi powiedziano. :-)
Czy rozbieżność jest spowodowana błędami w różnych parserach / przeglądarkach / silnikach / (jakkolwiek one się nazywają)?
Czy jest na to specyfikacja, czy może lista dozwolonych znaków dla „wartości” nagłówka HTTP?
źródło
Odpowiedzi:
W skrócie: tylko ASCII gwarantuje działanie. Niektóre bajty inne niż ASCII są dozwolone ze względu na wsteczną kompatybilność, ale nie powinny być wyświetlane.
HTTPbis zrezygnował i stwierdził, że w nagłówkach nie ma żadnego użytecznego kodowania poza ASCII:
Wcześniej RFC 2616 z 1999 definiował to:
a RFC 2047 to kodowanie MIME , więc byłoby:
ale nie sądzę, że wielu (jeśli jacyś) klientów to obsługuje.
źródło
Najpierw przeczytaj komentarze, ta odpowiedź prawdopodobnie wyciąga błędne wnioski z właściwych źródeł, wymaga edycji.
Możesz użyć dowolnych drukowalnych znaków ASCII i żadnych specjalnych znaków, takich jak ✰ (co nie jest ASCII )
Wskazówka : w JSON możesz zakodować wszystko.
Edycja : na początku może nie być oczywiste, kodowanie znaków zdefiniowane w nagłówku dotyczy tylko treści odpowiedzi, a nie samego nagłówka. (Ponieważ spowodowałoby to problem z kurczakiem i jajkiem).
Chciałbym podsumować wszystkie istotne definicje zgodnie ze specyfikacją, do której link zawiera Penchant.
Więc szukamy wartości pola .
LWS oznacza Linear White Space. Zasadniczo LWS to spacja lub tabulator, ale możesz podzielić wartość pola na wiele wierszy, rozpoczynając nowy wiersz przed spacją lub tabulatorem.
Uprośćmy to do tego:
Teraz szukamy treści terenowych .
TEKST jest najbardziej ogólny i zawiera całą resztę - więc zapomnij o reszcie -. Oto zestaw znaków US-ASCII (= ASCII)
Jak widać, wszystkie drukowalne znaki ASCII są dozwolone.
źródło
OCTET
s, a PonieważTEXT
jest dowolnyOCTET
z wyjątkiem0 - 31
, oznacza to, że dozwolone są wszystkie znakiOCTET
od32
do . Oktetów z ✰ są , i i wszystkie trzy z nich są dozwolone, dlatego ✰ jest dozwolone zgodnie z cytowanych fragmentów ty.255
226
156
176
CTLs
”? To znaczy znakiCR
,LF
są dozwolone? Czy może to oznacza, że dozwolona jest tylko ciągła sekwencja „CR
LF
SP
/HT
”? (Innymi słowy, można header wartości zawierać jedenCR
lubLF
lubHT
wartości nagłówka może zawierać znaki?CR
,LF
IHT
w dowolnej kolejności i ilości?)