Не полагайтесь на то, что заголовки HTTP могут передавать что-либо за пределы ASCII.Закодируйте свое сообщение об ошибке в теле своей сущности.
Длинный ответ:
Это, на мой взгляд, отстойная область стандарта HTTP.В соответствии со стандартом для HTTP / 1.1, поля заголовка HTTP
включают общие заголовок (раздел 4.5), заголовок запроса (раздел 5.3), заголовок ответа (раздел 6.2) и сущность-header (раздел 7.1), следуйте тому же общему формату, который указан в Разделе 3.1 RFC 822 [9].
В RFC 822 сказано:
3.1.2.Структура поля заголовка
После того, как поле развернуто, оно может рассматриваться как состоящее из имени поля, за которым следует двоеточие (":"), за которым следует поле-тело, и заканчивающегося полемвозврат каретки / перевод строки.Имя поля должно состоять из печатных символов ASCII (т. Е. Символов со значениями от 33 до 126., десятичных, кроме двоеточия).Тело поля может состоять из любых символов ASCII, кроме CR или LF.
Таким образом, таким образом, заголовки HTTP являются ASCII.Однако ранее в документе HTTP / 1.1 было сказано следующее:
Правило TEXT используется только для содержимого описательных полей и значений, которые не предназначены для интерпретации анализатором сообщений.Слова * TEXT МОГУТ содержать символы из наборов символов, отличных от ISO-8859-1 [22], только если они закодированы в соответствии с правилами RFC 2047 [14].
TEXT = <any OCTET except CTLs,
but including LWS>
(и 4.2 говоритзаголовки состоят из TEXT)
любая последовательность октетов не совпадает с ASCII, и текст «МОЖЕТ содержать символы из наборов символов, отличных от ISO-8859-1 [22], только когда кодируется в соответствии с» (я) косвенно предположить, что заголовки ISO-8859-1.Однако это менее важно, чем весь бит этого предложения:
Слова * TEXT МОГУТ содержать символы из наборов символов, отличных от ISO-8859-1 [22], только если они закодированы в соответствии с правиламиRFC 2047 [14].
Действительно, RFC 2047 дает нам возможность кодировать любую строку в любом наборе символов в ASCII.(RFC 2047 - это то, как электронные письма могут содержать такие вещи, как японский язык в строке «Тема» или «От».)
Теперь о грустной части: я не думаю, что какие-либо основные браузеры реализуют RFC 2047. И как выМы видели, что Chrome рассматривает заголовки как UTF-8, Firefox как ISO-8859-1.Вы можете отправить его в кодировке RFC 2047 или что-то похожее, например base64, и декодировать его в javascript, но в этот момент вы можете просто отправить его в теле.