使用http-equiv属性正确放置META标签?

时间:2010-07-15 21:57:33

标签: html meta-tags specifications

我正在页面上实施Bing地图(我更喜欢谷歌地图,但这不是我的选择)。我正在按照MS提供的教程进行操作:http://msdn.microsoft.com/en-us/library/bb412551.aspx

使用MS的代码,一切正常。使用我自己的一些jQuery代码充实它,我发现每次运行$ .get()时我都会收到“Permission Denied”错误。我认为这是某种“同源”冲突,但经过多次检查后,我确定我没有向任何其他主机请求任何内容(甚至没有www.example.com与example.com相关 - 一切都在同一个主机)。

经过多次挫折之后,我终于将原因归结为MS代码中的META标签:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

这是我HEAD部分的底部。在阅读规范。对于META标签(我不是很熟悉),我发现有些服务器可能会将http-equiv标签直接转换为HTTP标头,而其他服务器可能只是按原样发送它们。由于我认为标题必须在任何内容之前发送,我将META标记移动到HEAD部分的BEGINING,一切正常。

另一个细节:我只在IE7中遇到问题。当我在FF中测试时,我完全没有问题。

所以这是我的问题:META标签的http-equiv属性是否支持HEAD部分的开头? IE是不是很奇怪?或者FF只是特别原谅?

谢谢!

1 个答案:

答案 0 :(得分:1)

从HTML5草案规范(http://dev.w3.org/html5/spec/semantics.html#charset):

  

4.2.5元元素

     

[剪断]

     

4.2.5.5指定文档的字符编码

     

状态:最后征求意见

     

字符编码声明是一种机制,通过该机制可以指定用于存储或传输文档的字符编码。

     

以下限制适用于   字符编码声明:

* The character encoding name given must be the name of the character encoding 
  used to serialize the file.
* The value must be a valid character encoding name, and must be an ASCII
  case-insensitive match for the preferred MIME name for that encoding. 
  [IANACHARSET]
* The character encoding declaration must be serialized without the use of 
  character references or character escapes of any kind.
* The element containing the character encoding declaration must be serialized
  completely within the first 512 bytes of the document.
* There can only be one character encoding declaration in the document.

请注意第四点。我相信512字节规则是传统浏览器之间的折衷,它们在过去选择了不同的限制,但我认为所有浏览器都有一定长度的字节限制。这可能是原因,但为什么它应该导致“权限被拒绝”错误,我不知道。