application / * Content-Type和charset属性

时间:2014-12-03 14:07:18

标签: rest http character-encoding resteasy

3.7.1中的RFC-2616状态:

  

如果发件人,媒体没有提供明确的字符集参数   “text”类型的子类型被定义为具有默认字符集   通过HTTP接收时“ISO-8859-1”的值。

这就是我通常使用例如text/plain; charset=utf-8Content-Type标题。

类型application的MediaTypes怎么样?

我经常看到像Content-Type: application/xml; charset=UTF-8一样使用标题。 RESTeasy 2.3.7然后强制客户端也在Accept标头中发送charset参数。否则,它将以406回答。 RESTeasy 3.0.6在这里似乎更宽容,所以我不确定这里最好的做法是什么。

1 个答案:

答案 0 :(得分:6)

RFC 2616于2014年6月被一组RFC废弃,其中包含一般HTTP规范的RFC为RFC 7213。请使用RFC editor检查RFC的当前状态。

RFC 7213明确指出(见附录B):

  

ISO-8859-1的默认字符集用于文本媒体类型   删除;现在默认是媒体类型定义所说的。

另一方面,RFC 6657虽然预见到了这些变化,但声明:

  

默认" charset" " text / plain"的参数值没有改变   来自[RFC2046]并保持为" US-ASCII"。

因此,如果您的数据不是ASCII(= US-ASCII),则应该明确声明charset参数。

XML规范,条款4.3.3,指定:

  

在没有外部字符编码信息的情况下(例如   MIME标头),解析的实体,存储在其他编码中   UTF-8或UTF-16必须以文本声明开头[...]   包含编码声明

因此,对于通过HTTP传输的XML,无论内容类型如何,编码必须在HTTP头或编码声明中明确设置,例如: <?xml encoding='UTF-8'?>

对于application类型,通常可以应用特定于类型的规则。字符编码与大多数application类型无关,因为类型定义了自己的编码方案,包括任何嵌入字符数据的编码。