内容/字符编码 - 为什么HTTP标头(内容类型)优先于元标记(http-equiv)?



我已经研究内容编码一段时间了,但我仍在学习。

我的理解是,内容/字符编码决定了Web浏览器如何呈现正常ASCII范围(0-127)之外的字符。基本上,解释这些字符有不同的标准,如果指定了正确的内容编码,那么它们就会正确解释。如果指定了错误的字符编码,则最终可能会显示没有意义的字符。

我发现非常令人惊讶的一件事是,如果HTTP标头Content-Type字段和元标记http-equiv提到不同的编码,浏览器应该用HTTP标头覆盖http-equiv元标记。

在我看来,生成HTML文档的人最有可能知道正确的内容编码,因为这是他们的内容。如果他们使用工具创建 HTML,则该工具很容易自动包含元标记。另一方面,服务器可能提供具有许多不同编码格式的内容,或者具有不同的默认值。大多数生成HTML文档的人都可以控制元标记,但他们可能无法控制服务器标头,并且在许多情况下,这样做所需的技术技能水平更高。

内容也可以本地保存为.htm或.html,或从一台服务器复制到另一台服务器。但是,通常不会保留 HTTP 标头信息。因此,如果信息被复制,元标记通常会随之而来。从一台服务器复制的数据很容易转到另一台服务器,并以错误的编码提供。很容易制作一个在网络上加载的文件,但如果保存在本地,则无法正确加载。

我似乎找不到或想不出任何使用 HTTP 标头的理由,除了作为编码的备份或初始猜测。

我对这个决定背后的原因很感兴趣和好奇。在我看来,让元标记优先更合乎逻辑,因为它似乎是真正编码的更可靠的指示。有谁知道这个决定的历史以及它是如何做出的?

我是根据我自己的经验来回答这个问题的,因为我还没有看到其他人回复你,我想我会分享我的观点。

我认为服务器的编码覆盖网页编码的原因是,从历史上看,服务器会将您上传的任何基于文本的文件转换为适合服务器的格式。这包括重写字节序。这与未转换的二进制文件相反。

因为服务器转换了基于文本的文件,所以它会知道编码是什么,因为这就是它编码的内容。

当它随后将文本文件作为网页提供时,它必须覆盖原始编码,因为它可能已更改。

最新更新