Web-инжиниринг

       

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:

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 подставил информацию о кодовой странице тела сообщения уже позже того, как страницы принял.

далее...


Содержание раздела