Application/* атрибуты Content-Type и charset

RFC-2616 говорится в 3.7.1:

Если для отправителя не предоставляется явный параметр charset, среда подтипы типа "текст" определены как имеющие кодировку по умолчанию значение "ISO-8859-1" при получении через HTTP.

Вот почему я обычно использую, например, text/plain; charset=utf-8 в качестве заголовка Content-Type.

Как насчет MediaTypes типа application?

Я часто вижу и использую заголовки типа Content-Type: application/xml; charset=UTF-8. RESTeasy 2.3.7 затем заставляет клиента также отправлять параметр charset в заголовок Accept. В противном случае он ответит с помощью 406. RESTeasy 3.0.6 кажется здесь более понятным, поэтому я не уверен, что лучше всего здесь.

1 ответ

RFC 2616 был устаревшим в июне 2014 года набором RFC, где тот, который содержит общие спецификации HTTP, RFC 7213. Пожалуйста, используйте RFC-редактор, чтобы проверить текущий статус RFC.

RFC 7213 явно говорит (в Приложении B):

Шрифт по умолчанию для ISO-8859-1 для текстовых носителей удален; по умолчанию используется то, что указано в определении типа носителя.

С другой стороны, RFC 6657, предвосхищая такие изменения, объявляет:

Значение параметра "charset" по умолчанию для "text/plain" не изменяется из [RFC2046] и остается "US-ASCII".

Таким образом, если ваши данные не являются ASCII (= US-ASCII), вы должны явно указывать параметр charset.

Спецификация XML, предложение 4.3.3, указывает:

В отсутствие информации внешнего кодирования (например, MIME-заголовки), анализируемые объекты, которые хранятся в кодировке других чем UTF-8 или UTF-16 ДОЛЖНЫ начать с текстового объявления [...] содержащий объявление кодирования

Таким образом, для XML, передаваемого через HTTP, независимо от типа содержимого, кодировка ДОЛЖНА быть явно задана либо в заголовке HTTP, либо в объявлении кодирования, например. .

Для типов application в общем случае могут применяться правила типа. Кодировка символов не имеет отношения к большинству типов application, так как типы определяют свои собственные схемы кодирования, включая кодирование любых встроенных символьных данных.

licensed under cc by-sa 3.0 with attribution.