Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache

[English version avaliable]

Несколько слов о <META HTTP-EQUIV...>
Тег <META HTTP-EQUIV ...> был разработан и введен в стандарт HTML (он, как минимум, упоминается в Draft на HTML 3.2) для того, чтобы указать HTTP-серверу какие именно заголовки HTTP он может выставить. Как написано в draft HTML-3.2, это именно пожелание для сервера и не более. Драфт HTML 4.0 в этом смысле более четок - он позволяет WWW-клиенту учитывать тег <META HTTP-EQUIV> при определении кодировки, но при наличии HTTP-заголовка "Content-Type:... charset=...", кодировка должна определяться по HTTP-заголовку.

К сожалению, авторы WWW-броузеров (это относится и к Netscape Navigator и к Microsoft Internet Explorer) либо не читают стандартов, либо читают их как-то странно. Возможно, у них даже благие намерения. Когда такие броузеры встречают в документе таг

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows1251">
они перестают обращать внимание на корректный (т.е. соответствующий реальной кодировке) HTTP-заголовок Content-Type: и отображают документ в соответствии со своими представлениями об этом Charset (т.е. Netscape меняет шрифт на тот, который установлен для koi8-r, а MS IE перекодирует из KOI8 в cp1251). Более того, эти броузеры обращают внимание на этот тег даже в том случае, когда он встречается внутри <BODY> ... </BODY>, что уже ни в какие ворота не лезет (интересно, что они будут делать, когда в документе есть несколько противоречивых <META HTTP-EQUIV...> ?).

По большому счету, понятно почему авторы броузеров так поступают - это вполне объяснимое желание быть святее папы римского и одновременно помочь несчастным владельцам серверов с HTTP/0.9 (у этого протокола нет заголовка Content-type).

Эта проблема так и оставалась бы чисто теоретической, но к несчастью очень распространенные редакторы HTML-файлов (прежде всего MS FrontPage, MS Internet Word Assistant да и много всяких прочих) просто обожают вставлять этот тег в документы и отучить их никак не получается. Таким образом, проблема имеется. Возможных вариантов ее решения несколько:

  1. Привести содержимое <META HTTP-EQUIV...> в соответствие с реальностью. Этот способ кажется идеальным на первый взгляд, но на самом деле имеет свои недостатки. Основных недостатков два:
  2. Таким образом, мы приходим ко второму очевидному решению - <META HTTP-EQUIV..> нужно просто удалять. В этом случае все распространенные броузеры будут использовать значение HTTP-заголовка Content-Type, уважающие себя (и HTTP-протокол) PROXY-серверы тоже будут вести себя корректно. Этот метод воплощен в 'Russian Apache' начиная с версии PL18.
  3. Вообще говоря, есть и третий способ. А именно - увидев в документе <META HTTP-EQUIV...> прекратить всяческие попытки перекодировки, поставить HTTP-заголовок Content-Type в соответствующее положение (как предлагает стандарт HTML) и отдать документ AS-IS. Несмотря на соответствие стандартам, использование этого способа в 'Russian Apache' реально невозможно. Например, нельзя отдать документ в кодировке Windows-1251 пользователю, работающему под Unix - у него скорее всего не будет шрифтов, необходимых для чтения этого документа.






Спонсоры сайта:

[ Russian Apache ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"Russian Apache" includes software developed by the Apache Group for use in the Apache HTTP server project (http://www.apache.org/) See Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C) 1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.