这是一个正确的 Content-Type 标头吗?

这是一个正确的 Content-Type 标头吗?

我对大多数情况下的标头都有很好的理解Content-Type。我理解,对于以下四个示例,您通常会在 MIME 类型后面加上charset=your-charset-here

Content-Type "text/plain; charset=utf-8"
Content-Type "text/html; charset=utf-8"
Content-Type "text/javascript; charset=utf-8"
Content-Type "text/xml; charset=utf-8"

... 并且对于图像,没有字符集:

Content-Type "image/gif"
Content-Type "image/x-icon"
etc.

但是这两个呢?它们应该包括吗charset

Content-Type "application/x-javascript"
Content-Type "application/xml"

我知道如果不包含字符集也没关系,但如果可能的话,我还是想包含它。毕竟它们只是基于文本的文件。

答案1

Content-Type "text/xml; charset=utf-8"

这是多余的。对于 XML,<?xml?>声明优先于 Content-Type 标头。如果省略 XML 声明,则无论如何都会得到 UTF-8。

对于 XML,我通常会忽略字符集。鉴于 XML 有自己完善的内联字符编码机制,Content-Type 标头是不必要的,并且只有在意外为未指定字符集的文件选择错误类型(这些文件在encoding其他地方都被视为 UTF-8)时才会造成问题。

有一次你当您使用不兼容 ASCII 的字符集(通常是 UTF-16)时,XML 需要一个 charset 参数,否则解析器将无法读取<?xml。但您很少会想这样做。UTF-16 不是一种很好的文件存储/网络格式。

Content-Type "application/xml"

媒体application/xml类型由以下指定RFC3023charset,并且已为其明确定义了一个参数。因此,您可以charset根据需要使用(尽管如上所述,我通常不想要)。

Content-Type "application/x-javascript"

是一种非官方类型,因此没有规范说明charset参数是否存在或可能做什么。应该避免使用这种类型,而应使用text/javascript(传统)或application/javascript(由RFC4329)。

实际上,charset在 JavaScript 资源上设置并不够,因为 IE 会完全忽略它。

脚本字符集机制的优先级总结(从高到低):

  • IE:<script charset>属性,父页面的字符集

  • Opera:脚本文件的字符集,父页面的字符集

  • Mozilla、Webkit:脚本文件的字符集、<script charset>属性、父页面的字符集

相关内容