我目前正在阅读Dive into HTML5,我对character encoding part有疑问。
本书首先说,存在用于设置字符编码的<meta>
元素(如<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
)的原因是并非每个人都可以访问Web服务器,因此他们无法访问设置HTTP Content-Type标头,这是正确的方法。好的,这很有道理。
然后他继续说,
HTTP标头是首选方法,如果存在,它会覆盖
<meta>
标记。
现在,这没有意义。在没有访问权限的情况下,<meta>
标记是否应该允许您覆盖服务器行为?
答案 0 :(得分:3)
http-equiv
metas允许您在服务器未发送时提供值。它们不是服务器端配置的替代品,实际上服务器总是打算解析(静态)文件并发送适当的头。在the HTML 3.2 spec(1997年1月)中查看此描述:
可以使用HTTP-EQUIV属性代替NAME属性 通过网站检索文件时具有特殊意义 超文本传输协议(HTTP)。 HTTP服务器可以使用该属性 HTTP-EQUIV属性指定的名称,用于创建RFC 822样式 HTTP响应中的标头。这不能用于设置某些HTTP 但是,请参阅HTTP规范以获取详细信息。
答案 1 :(得分:1)
在过去的日子里,我们的想法是服务器可以查看内容并从meta
标签中获取信息。他们大多没有,真的是一个奇怪的想法。发生的事情是服务器不关注这些标签(它们甚至不读它们,因为它们根本不解析普通的HTML文档,它们只是提供它们),但是浏览器会这样做。
服务器通常使用某种映射表将文件扩展名映射到媒体类型(可能带有charset参数),以便在HTTP头中使用。使用PHP等技术时,标头由服务器端程序代码生成。
这为服务器端的meta
标签留下了很小的空间,但是当服务器不在HTTP标头中提供编码信息或在本地访问资源时,浏览器会使用它们。现代HTML规范反映了这一点,他们明确指出要优先考虑HTTP标头,这就是浏览器所做的事情。