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

Http


Управление HTTP-обменом.   

Прежде всего следует сказать несколько слов о HTTP-обмене, т.е. об обмене данными между браузером и сервером по протоколу HTTP(HyperText transfer Protocol).

Обмен производится по средством HTTP-сообщений. Сообщение состоит из двух частей: заголовка сообщения и тела сообщения. Заголовок - это фрагмент текста, который состоит из директив поротокола HTTP. Тело - это либо запрос пользователя (сообщение отправляется от браузера серверу), либо запраштваемый документ (сообщение отправляется от сервера клиенту). Тело следует за заголовком и отделяется от него пустой строкой.

При использовании элемента META с атрибутом http-equiv подразумевается, что значение этого тага задает имя директивы заголовка HTTP-сообщения, а атрибут content - значение этого оператора. Внешне это так и выглядит:

<meta http-equiv="Content-type" content="text/html; charset=windows-1251">

Создается впечатление, что размещенный в заголовке HTML-документа оператор заголовка HTTP-сообщения действительно попадет на свое место при HTTP-обмене. Следовательно, автор документа имеет возможность вмешаться в сам процесс обмена данными между сервером и клиентом. При более детальном рассмотрении оказывается, что это не совсем верно.

Для того, чтобы убедиться в этом, воспользуемся тем фактом, что заголовок HTTP-сообщения является набором строк ASCII-символов. Это значит, что если клиентом telnet зайти на TCP-порт, на котором осуществляет обслуживание запросов HTTP-сервер, то можно увидеть отклик сервера и обнаружить присутствие или отсутствие тех или иных операторов заголовка.

Проверим установку Expires. Для этого вставим в заголовок документа следующий МЕТА-таг:

<meta http-equiv="Expires" content="thu, May 07, 1998 21:50:01">


При обращении к серверу через telnet обнаруживаем, что данная конструкция не попадает в заголовок HTTP-сообщения:

IRIS 4% telnet www.kiae.ru 80

Trying 144.206.192.11...



Connected to www.kiae.ru.

Escape character is '^]'.

HEAD /~paul/http/expire.html HTTP/1.0

HTTP/1.1 200 OK

Date: Fri, 08 May 1998 19:56:47 GMT

Server: Apache/1.2.5 rus/PL22.2

Connection: close

Content-Type: text/html; charset=windows-1251

Vary: accept-charset, user-agent

Connection closed by foreign host.

При просмотре свойств документа в браузере мы обнаруживаем, что установка отмены кэширования произошла:

Location:http://www.kiae.ru/~paul/http/expire.html
File MIME Type:text/html
Source:Currently in disk cache
Local cache file:M1B7GGBM.HTM
Last Modified:Unknown
Last Modified:Unknown
Content Length:118
Expires:Thursday, May 07, 1998 21:50:01
Charset:windows-1251
Security:This is an insecure document that is not encrypted and offers no security protection.
Таким образом ,браузер сам анализирует содержание заголовка документа и хранит свойства, связанные с данным документом. Такое поведение браузера накладывает определенные ограничения на применение META для размещения операторов HTTP-заголовка.

Первым и самым очевидным ограничением является невозможность разместить в META операторы заголовка запроса клиента. Например, такой оператор как Allow. Документ приходит с сервера, и значения META могут только переназначить значения существующих операторов или добавить новые операторы отклика сервера, но не запроса клиента.

Реальный отклик сервера не содержит значений из META. Это значит, что если в нем есть оператор "Connection: close", то соединение закроется вне зависимости от того, что будет дополнительно указано в МЕТА.

Подводя некоторый итог, можно сказать, что в META с атрибутом http-equiv имеет смысл использовать только общие операторы заголовка HTTP-сообщения, операторы отклика сервера и операторы описания содержания. Операторы запроса клиента использовать в META смысла не имеет.

далее...


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