приложение/ * атрибуты Content-Type и charset


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

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

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

Как насчет Медиатипов типа application?

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

1 4

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, либо в объявлении кодировки, например <?xml encoding='UTF-8'?>.

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