it-roy-ru.com

В чем разница между text/xml и application/xml для ответа веб-службы

Это более общий вопрос о разнице между text/xml и application/xml. Я довольно новичок в написании веб-сервисов (REST - Джерси). Я создавал application/xml, поскольку именно это проявляется в большинстве учебных пособий/примеров кода, которые я использовал для изучения, но недавно я узнал о text/xml, и мне было интересно, что в нем отличается и когда вы будете использовать его поверх application/xml?

412
Mike

Это старый вопрос, но тот, который часто посещают, и четкие рекомендации теперь доступны из RFC 7303 , который устарел RFC3023. В двух словах (раздел 9.2):

The registration information for text/xml is in all respects the same
as that given for application/xml above (Section 9.1), except that
the "Type name" is "text".
61
DaveV

Из RFC ( 3023 ), в разделе 3, Типы носителей XML:

Если документ XML - это необработанный исходный документ XML - доступен для чтения обычным пользователям, text/xml предпочтительнее, чем Приложение/XML. Пользовательские агенты MIME (и пользовательские веб-агенты), которые не иметь явную поддержку текста/XML будет рассматривать его как текст/обычный, для Например, путем отображения сущности XML MIME в виде простого текста . Application/xml предпочтительнее, когда сущность XML MIME не читается случайными пользователями.

(акцент мой)

388
Oded

Согласно эта статья application/xml является предпочтительной.


Правка

Я сделал небольшое продолжение статьи. 

Автор утверждает, что кодировка объявлена ​​в инструкциях по обработке XML, например:

<?xml version="1.0" encoding="UTF-8"?>

можно игнорировать, когда используется text/xml тип носителя.

Они поддерживают тезис с определением text/* спецификации семейства типов MIME в RFC 2046 , в частности следующий фрагмент:

4.1.2.  Charset Parameter

   A critical parameter that may be specified in the Content-Type field
   for "text/plain" data is the character set.  This is specified with a
   "charset" parameter, as in:

     Content-type: text/plain; charset=iso-8859-1

   Unlike some other parameter values, the values of the charset
   parameter are NOT case sensitive.  The default character set, which
   must be assumed in the absence of a charset parameter, is US-ASCII.

   The specification for any future subtypes of "text" must specify
   whether or not they will also utilize a "charset" parameter, and may
   possibly restrict its values as well.  For other subtypes of "text"
   than "text/plain", the semantics of the "charset" parameter should be
   defined to be identical to those specified here for "text/plain",
   i.e., the body consists entirely of characters in the given charset.
   In particular, definers of future "text" subtypes should pay close
   attention to the implications of multioctet character sets for their
   subtype definitions.

По их мнению, таких трудностей можно избежать при использовании MIME-типа application/xml. Будь это правда или нет, я бы не пошел так далеко, чтобы избежать text/xml. ИМХО, лучше всего следовать семантике удобочитаемости (нечитаемости) и всегда не забывать указывать кодировку.

30
hardywang

application/xml рассматривается svn как binary type, тогда как text/xml как text file, для которого можно отобразить diff.

5
Michał Kawiecki

не для ответа на ваш вопрос, а для обеспечения простой жизни:

когда вы живете в экосистеме .NET Framework -> посмотрите на https://referencesource.Microsoft.com/#system.web/MimeMapping.cs line ~ 430:

AddMapping(".xml", "text/xml");

так что вы всегда можете сделать

string mimeType = System.Web.MimeMapping.GetMimeMapping(string yourFileName)

чтобы правильно определить ваш миметип

0
Bernhard