内容/字符编码 - 为什么HTTP标头(内容类型)优先于元标签(Http-Equiv)?

时间:2018-03-14 22:54:57

标签: html encoding character-encoding http-headers meta-tags

我一直在研究内容编码,但我还在学习。

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我是根据自己的经验来回答这个问题的,由于我还没有看到其他任何人对您的答复,所以我认为我会对此发表看法。

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

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

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