В настоящее время TIdHTTPServer
изначально не не поддерживает символы не ASCII в заголовках HTTP, и это особенно верно для параметра realm
заголовка WWW-Authenticate
, согласно определениюquoted-string
RFC 2616, который используется в RFC 2617 1 .
1: Indy не реализует RFC 7230..7235 или 7617 в TIdHTTP
или TIdHTTPServer
в это время.
Это, как говорится, когда Indyзаписывает и читает строки, он использует строковую кодировку IOHandler
по умолчанию (если вызывающая сторона не указывает иное), которая по умолчанию составляет IndyTextEncoding_ASCII
.В событии OnConnect
на сервере вы можете установить для свойства AContext.Connection.IOHandler.DefStringEncoding
значение IndyTextEncoding_UTF8
, а затем TIdHTTPServer
будет записывать и читать HTTP-заголовки как UTF-8 вместо ASCII.
Хотя RFCs 7235и 7617 формально не разрешают UTF-8 в realm
, они действительно используют определение quoted-string
из RFC 7230, которое допускает октеты до 0xFF (определение RFC 2616 нет), что заставляет меня думать, что UTF-8 можно использовать .И многие (но не все!) Веб-браузеры поддерживают UTF-8 в realm
.Но для максимально возможной совместимости вы должны придерживаться только символов ASCII в realm
, пока IETF формально не определит, что UTF-8 разрешено использовать, и все веб-браузеры реализуют его.