zoukankan      html  css  js  c++  java
  • [翻译]指定页面使用的字符集

    原文地址:Specify a character set

    概况:

          在HTML文档的响应头中指定一个字符集可以让浏览器立即开始解析HTML和执行脚本。

    细节:

          HTML文档在网络中是以伴随字符编码信息的字节序列形式传送的。字符编码信息可以指定在文档的HTTP请求头中,也可以在HTML里面的标记里面(meta标签)。浏览器使用编码信息将字节流转化成可渲染到屏幕上的字符。如果浏览器无法知道构建页面的字符,那么浏览器是无法正确渲染页面的。因此,浏览器在输入中查找字符编码信息时,会在执行任何脚本和绘制页面之前缓冲一定大小的字节。(导致在IE6、7、8中出现明显异常)

          如果没有找到字符集,浏览器对于默认的编码方式和缓冲字节的大小是不一样的。然而,一旦浏览器缓冲完必须的字节数并开始渲染页面时,渲染页面中如果发现页面中的字符集和默认的不一致,浏览器就需要重新解析输入和重新绘制页面。有时候,如果字符集和默认字符的不一致影响了外部资源的url(注:如果url中包含把中文等非英文字符,不同的编码方式可能会导致url的不一致),浏览器还需要重新请求资源。

          为了避免这些延迟,你需要在http响应头中指定你使用的字符集。注意:如果通过meta标签http-equiv来指定字符集,IE8的先行下载(lookahead downloader)功能将被禁用。禁用IE8的先行下载功能回导致加载页面的时间大大增加。微软是这样写的我们强烈建议Web开发人员在HTTP的Content-Type响应头中指定字符集,因为这样可以确保先行下载的性能优势得以实现。

    建议

    始终指定内容类型(content-type)

          在浏览器开始检查字符集之前,必须确定正在处理的文档的的内容类型。如果内容类型没有在http头或者http的meta标签中指定,浏览器就会根据不同的算法来判断类型。这个过程可能会导致额外的延迟以及一个安全漏洞。处于性能和安全性的考虑,我们应该为所有资源指定一个内容类型(不仅是text/html,也就是html文档)。

    一定要指定正确的字符编码

          不论是在http头还是在文档meta标签中指定字符集,字符集应该和文档中真正的字符编码相匹配。如果http响应头和meta标签中都指定了字符集,我们必须保证二者相互匹配。如果浏览器检测到一个不正确的或不匹配的编码方式,它会错误地渲染页面和/或产生额外的延迟,同时还会重绘页面。有关有效字符集的详细信息,请参见HTML 4.01规范中的第5.2节,字符编码

    其他资源

          有关浏览器对于存在/不存在的内容类型和字符集规范的行为的详细信息,请参阅:

    后记:

    在页面中指定字符集、x-ua-compatible、<base>,这三者是具有一定的顺序的。对于字符集,应该尽量在head的最前面,后面紧跟x-ua-compatible,然后是base:

    <doctype> 
    <html> 
    <head> 
    <meta http-equiv content-type charset>  
                <meta http-equiv x-ua-compatible> 
                <base> 
    <title, favicon, comments, script blocks, etc>

    根据《Best Practice: Get your HEAD in order》所说,我们最好在HTTP响应头中指定字符集和X-UA-Compatible(如果需要的话),结论如下:

    For best performance, specify your page’s character set and X-UA-Compatible (if desired) using HTTP response headers, helping the browser avoid expensive restarts.

    参考文章:

    Best Practice: Get your HEAD in order

    谈谈关于IE8的一些bug,主要是base href

  • 相关阅读:
    无法直接启动带有类库输出类型的项目
    2个页面传值方法
    vs2005 无法附加 绑定句柄无效 解决办法
    认识serializable,序列化
    jsp 连接sql 2008
    有进步,嘎嘎....
    找不到存储过程'dbo.aspnet_CheckSchemaVersion'
    BackOffice Common中实现的相关功能
    MVC中Action相关方法的建议
    mysql的数据库相关维护操作:重启、修改连接数、删除连接
  • 原文地址:https://www.cnblogs.com/shinnyChen/p/3750020.html
Copyright © 2011-2022 走看看