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 операторы заголовка запроса клиента. Например, такой оператор как Allow. Документ приходит с сервера, и значения META могут только переназначить значения существующих операторов или добавить новые операторы отклика сервера, но не запроса клиента.
Реальный отклик сервера не содержит значений из META. Это значит, что если в нем есть оператор "Connection: close", то соединение закроется вне зависимости от того, что будет дополнительно указано в МЕТА.
Подводя некоторый итог, можно сказать, что в META с атрибутом http-equiv имеет смысл использовать только общие операторы заголовка HTTP-сообщения, операторы отклика сервера и операторы описания содержания. Операторы запроса клиента использовать в META смысла не имеет.
далее...