【发布时间】:2016-07-09 21:32:21
【问题描述】:
这个问题涉及XML 1.0 和HTTP 1.1 建议之间的相互作用。
我有一个 Web 服务,它接受格式良好的 XML 1.0 文档,对其进行解析,然后将其重新序列化回客户端。该服务同时支持 Content-Type text/xml 和 application/xml。
假设以下文档以Content-Type: text/plain; charset=us-ascii 和Accept: text/plain 和Accept-Charset: us-ascii 提交:
<?xml version="1.0" encoding="UTF-8" ?>
<x>Inhoffenstraße</x>
以上文档格式正确,满足编码要求。
解析后,XML DOM 为 UTF-8。由于文档的编码也是 UTF-8,所以文档会被重新序列化为:
<?xml version="1.0" encoding="UTF-8" ?>
<x>Inhoffenstraße</x>
上述文档与Accept-Charset 标头不兼容。但是,至少可以通过三种方式满足此请求:
-
使用编码 US-ASCII 序列化 DOM。这似乎是错误且不必要的,因为我正在更改文档的基本属性,这可能会误导客户端(例如,这会破坏应用层的某些东西,即 ESB/SOAP):
<?xml version="1.0" encoding="US-ASCII" ?> <x>Inhoffenstraße</x> -
通过将非 ASCII 字符替换为其 Unicode 字符引用,对服务层中的序列化 UTF-8 进行后处理。这感觉像是一种 hack,因为 XML 特定的字符编码正在使用非 XML 感知的字符串转换对整个文档执行:
<?xml version="1.0" encoding="UTF-8" ?> <x>Inhoffenstraße</x> -
拒绝服务层的请求为
406 Not Acceptable。这将假定encoding="UTF-8"与Accept-Charset: us-ascii冲突。但是,我认为情况并非如此,因为请求的实际 content 完全由 ASCII 字符组成。
响应的预期、符合标准的行为是什么?根据我对参考标准的理解,以上任何一项都可能是可以接受的。
以下对不同问题的回答提供了一些有用的信息,但并未具体解决 text/xml 案例:
application/* Content-Type and charset attributes
我链接以下问题是因为我认为它源于一个相关问题:
Escaping Unicode string in XmlElement despite writing XML in UTF-8
【问题讨论】:
-
如果您说该服务接受
text/xml和application/xml,为什么要以text/plain提交?
标签: xml http utf-8 character-encoding xml-serialization