在HTML文檔的響應頭中指定一個字符集可以讓瀏覽器立即開始解析HTML和執行腳本。
HTML文檔在網絡中是以伴隨字符編碼信息的字節序列形式傳送的。字符編碼信息可以指定在文檔的HTTP請求頭中,也可以在HTML里面的標記里面(meta標簽)。瀏覽器使用編碼信息將字節流轉化成可渲染到屏幕上的字符。如果瀏覽器無法知道構建頁面的字符,那么瀏覽器是無法正確渲染頁面的。因此,瀏覽器在輸入中查找字符編碼信息時,會在執行任何腳本和繪制頁面之前緩沖一定大小的字節。(導致在IE6、7、8中出現明顯異常)
如果沒有找到字符集,瀏覽器對于默認的編碼方式和緩沖字節的大小是不一樣的。然而,一旦瀏覽器緩沖完必須的字節數并開始渲染頁面時,渲染頁面中如果發現頁面中的字符集和默認的不一致,瀏覽器就需要重新解析輸入和重新繪制頁面。有時候,如果字符集和默認字符的不一致影響了外部資源的url(注:如果url中包含把中文等非英文字符,不同的編碼方式可能會導致url的不一致),瀏覽器還需要重新請求資源。
為了避免這些延遲,你需要在http響應頭中指定你使用的字符集。注意:如果通過meta標簽http-equiv來指定字符集,IE8的先行下載(lookahead downloader)功能將被禁用。禁用IE8的先行下載功能回導致加載頁面的時間大大增加。微軟是這樣寫的:我們強烈建議Web開發人員在HTTP的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>
新聞熱點
疑難解答