Какое значение Content-Type я должен отправить для моей карты сайта XML? - PullRequest
120 голосов
/ 17 июля 2010

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

Ответы [ 5 ]

152 голосов
/ 17 июля 2010

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

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

Для текст / xml :

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

Для приложение / xml :

Если получен объект application / xml, где кодировка параметр не указан, информация о 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).

24 голосов
/ 17 июля 2010

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

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

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

Для 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 Content-Введите HTTP-заголовок или
  2. us-ascii.

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

9 голосов
/ 17 июля 2010

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

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

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

6 голосов
/ 17 июля 2010

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

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

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

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

0 голосов
/ 26 января 2019

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

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

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

...