这是一个关于text/xml和application/xml区别的一般性问题。 对于编写web服务(REST - Jersey),我还是个新手。我一直在生产application/xml,因为它出现在我一直用来学习的大多数教程/代码示例中,但我最近发现了text/xml,想知道它有什么不同,什么时候会使用它而不是application/xml?
在RFC(3023)的第3节中,XML媒体类型:
如果是XML文档,即未处理的源XML文档 ——普通用户可读,text/xml更可取 应用程序/ xml。MIME用户代理(和web用户代理)不这样做 有明确的支持文本/xml将它视为文本/纯,为 例如,通过将XML MIME实体显示为纯文本。 当xml MIME实体不可读时,Application/xml更可取 普通用户。
(强调我的)
根据本文,应用程序/xml是首选。
EDIT
我跟进了一下那篇文章。
作者声称在XML处理指令中声明的编码,如:
<?xml version="1.0" encoding="UTF-8"?>
当使用text/xml媒体类型时可以忽略。
他们支持了RFC 2046中text/* 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/xml MIME类型时可以避免这种困难。无论是否正确,我都不会避免使用text/xml。以我之见,最好遵循人类可读性(非可读性)的语义,并始终记得指定字符集。
这是一个老问题,但它经常被提及,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".
Web浏览器将文本/纯文本显示为明文,而大多数浏览器将应用程序/xml解析为数据树,并突出显示语法,甚至进一步应用使用XSLT声明的转换。当检测到错误时,一些浏览器会切断将application/xml作为数据树呈现,但无论语法错误如何,都会完整地显示text/xml。
推荐文章
- 跨REST微服务的事务?
- XML Schema minOccurs / maxOccurs默认值
- 调用webrequest, POST参数
- XPath根据子元素的值选择元素
- 如何在Spring RestTemplate请求上设置“接受:”头?
- 用java解析DOM的规范化——它是如何工作的?
- c++最好的开放XML解析器是什么?
- XPath:从子节点获取父节点
- 如何在Python中使用XPath ?
- REST API最佳实践:查询字符串中的参数vs请求体中的参数
- 错误:不允许匹配“[xX][mM][lL]”的处理指令目标
- Java中SOAP和rest式web服务的主要区别
- 如何使用PHP动态生成XML文件?
- 如何改变线的颜色在EditText
- 如何为Java创建REST客户端?