【问题标题】:application/* Content-Type and charset attributesapplication/* Content-Type 和 charset 属性
【发布时间】:2015-02-01 03:16:29
【问题描述】:

3.7.1 中的RFC-2616 状态:

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

这就是为什么我通常使用例如text/plain; charset=utf-8 作为 Content-Type 标头。

application 类型的 MediaTypes 呢?

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

【问题讨论】:

    标签: rest http character-encoding resteasy


    【解决方案1】:

    RFC 2616 在 2014 年 6 月被一组 RFC 淘汰,其中包含通用 HTTP 规范的是RFC 7213。请使用RFC editor 查看 RFC 的当前状态。

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

    文本媒体类型的默认 ISO-8859-1 字符集已
    移除;默认值现在是媒体类型定义所说的任何内容。

    另一方面,RFC 6657 在预料到这种变化的同时声明:

    “text/plain”的默认“charset”参数值不变 来自 [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 类型无关,因为这些类型定义了自己的编码方案,包括任何嵌入字符数据的编码。

    【讨论】:

      猜你喜欢
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      相关资源
      最近更新 更多