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

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

Ответ 1

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

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

Для текста /XML:

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

Для приложения /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).

Ответ 2

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

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

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

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

  • кодировка, заданная в параметре charset HTTP-заголовка Content-Type
  • кодировка, заданная в атрибуте кодирования объявления XML в документе,
  • UTF-8.

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

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

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

Ответ 3

оба прекрасны.

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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