用于Web服务响应的text / xml与application / xml之间有什么区别


494

这是更多的区别一般问题text/xmlapplication/xml。我是写Web服务的新手(REST-Jersey)。我一直在制作,application/xml因为它是我一直在学习的大多数教程/代码示例中所显示的内容,但是最近我发现了它,text/xml并想知道它有什么不同之处以及何时使用它application/xml


正如DaveV的答案以及tools.ietf.org/html/rfc3023的标题中所指出的那样,RFC 3023(由Oded的答案引用,目前已被接受)已过时。实际上,较新的RFC 7303对这个问题的回答与以前的RFC 3023明显不同。因此,如果您接受DaveV的答案,那么我认为这对将来的读者会有所帮助,以便将最新信息保留在答案列表的顶部。
Mark Amery

根据下面的Dave V和MariánČerný,如果您正在做新的事情,似乎首选使用application / xml。
Sql Surfer

text/是针对人类的。application/是为计算机而设计的
Ian Boyd

Answers:


108

这是一个古老的问题,但是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".

6
引用的段落提到了IANA注册信息,该信息(通过检查9.1节)也处理编码,因此application/xml和之间的字符集处理不应再有任何区别text/xml。此外,我认为抽象的这一部分:“这个规范标准化...应用/ XML ...而定义的文本/ XML作为... ...别名”意味着application/xmltext/xml是等价的,不存在优先一个关于另一个。
玛丽安·塞尔尼

427

在RFC(3023)的第3节“ XML媒体类型”下:

如果XML文档(即未处理的源XML文档可由临时用户读取,则text / xml比application / xml更可取。不明确支持text / xml的MIME用户代理(和Web用户代理)会将其视为text / plain,例如,通过将XML MIME实体显示为纯文本。 当 临时用户无法读取 XML MIME实体时,最好使用Application / xml

(强调我的)


6
@drachenstern-我认为非描述性元素和属性的可能性更大(<a1 d="" g="">例如,临时用户不可读)。
奥德

3
@Mike当然。一些XML文件基本上是记录列表,例如:msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx这更可能由应用程序读取和处理。其他的基本上是带有标记的文本,例如HTML页面。为它们使用text / xml听起来更合适。
biziclop 2011年

5
请举一个不可读与可读的示例。我们使用大多是可读的,但做文件的base64编码节点等。
乔·菲利普斯

5
@JoePhilllips-您去了。base64是人类不可读的。如果无需使用工具或查看手册就可以阅读整个文档并对人类有意义(该xgsf标签是什么意思?),那么它是可读的。
Oded

8
@CommaToast如果“ text / xml”为“接受”,则Web服务器可能会返回格式化并缩进的XML,而application / xml可能会返回所有已删除的空白。例如,在ASP.NET MVC中,可以为不同的mimetypes指定不同的处理程序。
Novaterata

33

根据本文, application / xml是首选。


编辑

我对这篇文章做了一些跟进。

作者声称,XML处理指令中声明的编码如下:

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

text/xml使用媒体类型时可以忽略。

他们用RFC 2046text/*MIME类型族规范的定义来支持本文,特别是以下片段:

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.

他们认为,使用application/xmlMIME类型可以避免此类困难。不管是真的还是假的,我都不会回避text/xml。恕我直言,最好只是遵循人类可读性(非可读性)的语义,并始终记住要指定字符集。


1
+1的链接。用您自己的话说,本文得出的基本结论是什么?也许“这篇文章指出文件编码被忽略,这意味着您无法在具有text / xml标头的文件中发送utf-8和二进制数据”也得到了验证吗?
Shanimal 2012年

我同意@Shanimal,答案应包括文章的要点,因为该链接可能不会永远持续下去。它的消失将使答案几乎毫无用处。任何人都可以确认有关忽略有关编码的XML处理指令的声明吗?
toniedzwiedz

1
根据原始作者的说法,此问题已在以后的规范修订版中得到解决Update: The situation has changed in the new HTTP/1.1 RFC: The default charset of ISO-8859-1 for text media types has been removed; the default is now whatever the media type definition says.
修订版中 -TheNorthWes

如果我使用ajax加载XML文件,则它是类型的“文档”,application/xml但是如果我使用输入表单元素,则它是类型text/xml不正确处理我的代码的“文件” 。如何将其转换为其他格式?
魔鬼的代言人

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.