HTTP 内容类型标头中的字符集组件是必需的吗?

Adr*_*ire 4 http http-headers

一个HTTP请求可能有这样的Content-Type标题:

GET / HTTP/1.1
...
Content-Type: text/xml; charset=utf-8
...
Run Code Online (Sandbox Code Playgroud)

是否存在该charset组件是强制性的情况?万一,什么时候?

可能的Content-Type标题示例,不一定正确:

Content-Type: text/xml
Content-Type: charset=utf-8
Content-Type: text/xml; charset=utf8
Content-Type:
Run Code Online (Sandbox Code Playgroud)

标准信息:

编辑注意:似乎这个参考已经过时了,RFC 7231 现在是正确的版本,正如@RobbyCornelissen 所建议的那样。

标准对此说得很少(或者我可能看错了地方):https : //www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

14.17 内容类型

Content-Type entity-header 字段指示发送给接收者的实体主体的媒体类型,或者在 HEAD 方法的情况下,如果请求是 GET,则将发送的媒体类型。

   Content-Type   = "Content-Type" ":" media-type
Run Code Online (Sandbox Code Playgroud)

媒体类型在第 3.7 节中定义。该领域的一个例子是

   Content-Type: text/html; charset=ISO-8859-4
Run Code Online (Sandbox Code Playgroud)

第 7.2.1 节提供了对识别实体媒体类型方法的进一步讨论。

Cod*_*ter 5

参见RCF 7231,附录 B。 RFC 2616 的变化

文本媒体类型的 ISO-8859-1 的默认字符集已被删除;现在默认值是媒体类型定义所说的。同样,ISO-8859-1 的特殊处理已从 Accept-Charset 标头字段中删除。(第 3.1.1.3 节和第 5.3.3 节)

所以它取决于给定媒体类型的默认字符集/编码。您可以使用 IANA查找媒体类型注册表,例如application/xml 媒体类型,它链接到RFC 7303 第 3 节

一个 XML MIME 实体可能存在多达三个关于字符编码的不同信息源:一个字符集参数、一个 BOM(参见下面的第 3.3 节)和一个 XML 编码声明(参见 [XML] 的第 4.3.3 节)。确保这些来源之间的一致性需要实体作者和 MIME 代理(即打包、传输、交付和/或接收 MIME 实体的过程)之间的协调。

不带 BOM 的 UTF-8 被推荐用于所有 XML MIME 实体。

所以不,这不是强制性的,但如果省略,则取决于您如何检测它的特定媒体类型。