Krótka odpowiedź: iso-8859-1, chyba że zakodowane słowa są używane zgodnie z RFC2047 (MIME).
Dłuższe wyjaśnienie:
RFC2617, sekcja 2 (Uwierzytelnianie HTTP) definiuje podstawowe poświadczenia :
basic-credentials = base64-user-pass
base64-user-pass = <base64 encoding of user-pass,
except not limited to 76 char/line>
user-pass = userid ":" password
userid = *<TEXT excluding ":">
password = *TEXT
Specyfikacji nie należy czytać bez odwołania się do RFC2616 (HTTP 1.1) dla definicji w BNF (jak powyższa):
Ta specyfikacja jest uzupełnieniem specyfikacji HTTP / 1.1 2 . Używa rozszerzonej sekcji BNF 2.1 tego dokumentu i opiera się zarówno na nieterminalach zdefiniowanych w tym dokumencie, jak i na innych aspektach specyfikacji HTTP / 1.1.
RFC2616, sekcja 2.1 definiuje TEKST (moje wyróżnienie ):
Reguła TEKST jest używana tylko do opisowej zawartości pól i wartości, które nie mają być interpretowane przez parser komunikatów. Słowa * TEXT MOGĄ zawierać znaki z zestawów znaków innych niż
ISO-8859-1 tylko wtedy, gdy są kodowane zgodnie z zasadami RFC 2047.
TEXT = <any OCTET except CTLs, but including LWS>
Jest to więc zdecydowanie iso-8859-1, chyba że wykryjesz inne kodowanie zgodne z regułami RFC2047 (MIME pkt 3):
// Username: Mike
// Password T€ST
Mike:=?iso-8859-15?q?T€ST?=
W takim przypadku znak euro w słowie byłby zakodowany 0xA4
zgodnie z ISO-8859-15 . Rozumiem, że należy sprawdzić te zakodowane ograniczniki słów, a następnie zdekodować zawarte w nich słowa w oparciu o określone kodowanie. Jeśli tego nie zrobisz, pomyślisz, że hasło to =?iso-8859-15?q?T¤ST?=
(uwaga, 0xA4
które zostanie zdekodowane, ¤
gdy zostanie zinterpretowane jako iso-8859-1).
To jest moje rozumienie, nie mogę znaleźć bardziej wyraźnego potwierdzenia niż te RFC. A niektóre z nich wydają się sprzeczne. Na przykład jednym z 4 określonych celów RFC2047 (MIME, pkt 3) jest przedefiniowanie:
format wiadomości umożliwiający… tekstowe informacje w nagłówku w zestawach znaków innych niż US-ASCII.
Ale potem RFC2616 (HTTP 1.1) definiuje nagłówek przy użyciu reguły TEXT, która domyślnie jest ustawiona na iso-8859-1. Czy to oznacza, że każde słowo w tym nagłówku powinno być zakodowanym słowem (tj. =?...?=
Formą)?
Co więcej, żadna obecna przeglądarka tego nie robi. Używają utf-8 (Chrome, Opera), iso-8859-1 (Safari), strony kodowej systemu (IE) lub czegoś innego (jak tylko najbardziej znaczący bit z utf-8 w przypadku Firefoksa).
Edycja: właśnie zdałem sobie sprawę, że ta odpowiedź przedstawia problem bardziej z perspektywy serwera.