it-swarm.com.ru

Какое значение Content-Type я должен отправить для моей карты сайта XML?

Я думал, что я должен отправить «text/xml», но потом я прочитал, что я должен отправить «application/xml». Это имеет значение? Может кто-нибудь объяснить разницу?

119
Kyle

Разница между text/xml и application/xml является кодировкой символов по умолчанию, если параметр charset опущен:

Text/xml и application/xml ведут себя по-разному, когда кодировка параметр не указан явно. Если набор символов по умолчанию (например, US-ASCII) для text/xml по какой-то причине неудобен (например, плохие веб-серверы ), Application/xml предоставляет альтернативу (см. «Необязательные Параметры» регистрация application/xml в разделе 3.2).

Для text/xml :

Соответствует [RFC2046], если объект text/xml получен с параметр charset опущен, MIME-процессоры и XML-процессоры ДОЛЖЕН использовать значение по умолчанию charset "us-ascii" [ASCII]. В случаях где сущность XML MIME передается через HTTP, по умолчанию Значение charset по-прежнему "us-ascii".

Для application/xml :

Если сущность application/xml получена там, где charset параметр не указан, информация о .__ не предоставляется charset заголовком MIME Content-Type. Соответствующий XML Процессоры ДОЛЖНЫ следовать требованиям, изложенным в разделе 4.3.3 [XML] что напрямую связано с этим непредвиденным обстоятельством. Тем не менее, MIME процессоры которые не являются процессорами XML, НЕ ДОЛЖНЫ принимать кодировку по умолчанию, если параметр charset опущен в объекте application/xml.

Таким образом, если параметр charset пропущен, кодировка символов text/xml является US-ASCII, тогда как с помощью application/xml кодировка символов может быть указана в самом документе.

Теперь в Интернете действует правило: «Будь строг с выходом, но будь терпимым с вводом». Это означает, что при доставке данных через Интернет нужно как можно больше соответствовать стандартам. Но встроите некоторые механизмы, чтобы пропустить ошибки или угадать при получении и интерпретации данных через Интернет.

Так что в вашем случае просто выберите один из двух типов (я рекомендую application/xml) и убедитесь, что вы правильно указали используемую кодировку символов (я рекомендую использовать соответствующую кодировку символов по умолчанию для безопасного воспроизведения, поэтому в случае application/xml использовать UTF-8 или UTF-16).

150
Gumbo

Как правило, самая надежная ставка на то, чтобы все документы веб-серверов, прокси-серверы и клиентские браузеры обрабатывались надлежащим образом, - это, вероятно, следующее:

  1. Используйте тип содержимого application/xml
  2. Включите кодировку символов в тип содержимого, возможно, UTF-8
  3. Включите соответствующую кодировку символов в атрибут кодировки самого документа XML.

В терминах RFC 3023 spec, которые некоторые браузеры не могут реализовать должным образом, основное различие в типах контента заключается в том, как клиенты должны обрабатывать кодировку символов, следующим образом:

Для application/xml, application/xml-dtd, application/xml-external-parsed-entity или любого из подтипов application/xml, таких как application/atom + xml, application/rss + xml или application/rdf + xml кодировка символов определяется в следующем порядке:

  1. кодировка, указанная в параметре charset HTTP-заголовка Content-Type
  2. кодировка, указанная в атрибуте кодирования декларации XML внутри документа,
  3. uTF-8.

Для text/xml, text/xml-external-parsed-entity или такого подтипа, как text/foo + xml, атрибут кодирования объявления XML в документе игнорируется, а кодировка символов:

  1. кодировка, указанная в параметре charset HTTP-заголовка Content-Type, или
  2. uS-ASCII.

Большинство парсеров не реализуют спецификацию; они игнорируют HTTP-тип контекста и просто используют кодировку в документе. С таким количеством плохо сформированных документов это вряд ли изменится в ближайшее время.

24
nas

оба в порядке.

text/xxx означает, что если программа не понимает xxx, имеет смысл показать файл пользователю в виде простого текста. application/xxx означает, что показывать его бессмысленно.

Обратите внимание, что эти типы контента были изначально определены для вложения электронной почты, прежде чем они впоследствии были использованы в мире Интернета.

9
Hendrik Brummermann

text/xml предназначен для документов, которые были бы полезны человеку, если бы он был представлен как текст без дальнейшей обработки, application/xml - для всего остального

Каждый объект XML подходит для использования с приложением/xml media Тип без изменений. Но это не использует тот факт, что XML можно рассматривать как обычный текст во многих случаях. Пользовательские агенты MIME (и агенты веб-пользователей), которые не имеют явной поддержки application/xml будет обрабатывать его как application/octet-stream для Например, предлагая сохранить его в файл.

Чтобы указать, что сущность XML должна рассматриваться как по умолчанию используйте текстовый/xml тип мультимедиа. Это ограничивает кодировку используется в сущности XML для тех, которые совместимы с требования к типам текстовых носителей, как описано в [RFC-2045] и [RFC-2046], например, UTF-8, но не UTF-16 (за исключением HTTP).

- http://www.ietf.org/rfc/rfc2376.txt

6
Quentin

Другие ответы здесь касаются общего вопроса о том, что такое Content-Type для ответа XML, и делают вывод (как в случае с В чем разница между text/xml и application/xml для ответа веб-службы ), что и text/xml, и application/xml допустимы. Однако ни в одном из них не указано, существуют ли какие-либо правила, специфичные для sitemaps.

Ответ: нет. Спецификация карты сайта - https://www.sitemaps.org , и с помощью поиска Google site: вы можете убедиться, что она не содержит слов или фраз mime, mimetype, content -type, application/xml или text/xml где угодно. Другими словами, в нем совершенно ничего не говорится о том, что Content-Type следует использовать для обслуживания карт сайта.

В отсутствие какого-либо комментария в спецификации карты сайта, непосредственно касающегося этого вопроса, мы можем с уверенностью предположить, что применяются те же правила, что и при выборе Content-Type любого другого XML-документа, т. Е. Что это может быть text/xml или application/xml.

0
Mark Amery