Content
Перекодировка "на лету"
В отличие от Refresh, Content-type - это настоящая директива заголовка HTTP-сообщения. Ее относят к директивам описания тела сообщения. Content-type определяет MIME(media-type в протоколе HTTP/1.1) тип и подтип содержания тела HTTP-сообщения. В общем виде она имеет синтаксис:
Content-type: тип/подтип
Основное назначение использования Content-type в META - определение типа кодировки. Для этой цели служит атрибут charset. Для большинства современных браузеров указания этого атрибута достаточно для того, чтобы можно было перекодировать тело документа из кодировки, в которой он получен, в кодировку, установленную в качестве кодировки отображения браузера. Тип кодировки тела документа и указывается в charset:
<meta http-equiv="Content-type" content="text/html; charset=windows-1251">
Существует однако ряд проблем, связанных с Unix- платформами, где перекодировка тела "на лету" осуществляется с ошибками. В этих случаях использование Content-type не рекомендуется. Если в качестве сервера используется Russian Apache, то сервер сам выдает нужное значение атрибута у оператора Content-type:
IRIS 55% telnet www.kiae.ru 80
Trying 144.206.192.11...
Connected to www.kiae.ru.
Escape character is '^]'.
HEAD /~paul HTTP/1.0
HTTP/1.1 301 Moved Permanently
Date: Fri, 08 May 1998 23:18:13 GMT
Server: Apache/1.2.5 rus/PL22.2
Location: http://www.kiae.ru/~paul/
Connection: close
Content-Type: text/html; charset=windows-1251
Vary: accept-charset, user-agent
Connection closed by foreign host.
Как видно из этого примера, сервер выдал кодовую страницу умолчания windows-1251. Мы в telnet не задавали тип клиента. Если задать тип клиента как клиент X11, то результат будет несколько иным:
IRIS 73% telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.net.kiae.su.
Escape character is '^]'.
HEAD / HTTP/1.0
User-Agent: kuku (X11
HTTP/1.1 200 OK
Date: Sat, 09 May 1998 01:18:52 GMT
Server: Apache/1.2.5 rus/PL22.2
Connection: close
Content-Type: text/html; charset=koi8-r
Vary: accept-charset, user-agent
Connection closed by foreign host.
В данном случае в качестве браузера был указан браузер kuku(реально такого браузера, конечно, нет). Однако, причиной, по которой была получена кодировка koi8-r, заключена в другом. Russian Apache реагирует на конструкцию "(X11". Именно это сочетание, по умолчанию, заставляет его переключиться в режим выставления charset=koi8-r, если он настроен на кодирование по типу браузера. При этом тело HTTP-сообщения будет действительно содержать текст в кодировке koi8 вне зависимости от кодировки на диске. Apache перед отправкой его перекодирует.
Выставим кодировку koi8-r через META, но обратимся из Windows:
<meta http-equiv="Content-type" content="charset=koi8-r">
При этом получим в браузере:
Location: | http://www.kiae.ru/~paul/http/charset.html |
File MIME Type: | text/html |
Source: | Currently in disk cache |
Local cache file: | MV6GULJ9.HTM |
Last Modified: | Unknown |
Last Modified: | Unknown |
Content Length: | 121 |
Expires: | No date given |
Charset: | koi8-r |
Security: | This is an insecure document that is not encrypted and offers no security protection. |
telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.net.kiae.su.
Escape character is '^]'.
GET /~paul/http/content.htm HTTP/1.0
HTTP/1.1 200 OK
Date: Sat, 09 May 1998 01:34:12 GMT
Server: Apache/1.2.5 rus/PL22.2
Connection: close
Content-Type: text/html; charset=windows-1251
Vary: accept-charset, user-agent
<html>
<head>
<meta http-equiv="Content-type" content="charset=koi8-r">
</head>
<body>
kuku
</body>
</html>
Connection closed by foreign host.
Как видно из последнего примера, в заголовке нет изменений относительно типа кодовой страницы. Netscape подставил информацию о кодовой странице тела сообщения уже позже того, как страницы принял.
далее...