РНР 5 в подлиннике

Страница 30 из 554


62

Часть I. Основы Web-программирования

называются заголовками (headers), и их может быть сколько угодно. Протокол HTTP как раз и задает правила формирования и интерпретации этих заголовков.

Вот мы и начинаем знакомство с протоколом HTTP. Как видите, он представляет собой не что иное, как просто набор заголовков, которыми обмениваются сервер и браузер, и еще пару соглашений насчет метода post, которые мы вскоре рассмотрим.

Не все заголовки обрабатываются сервером — некоторые просто пересылаются запускаемому сценарию с помощью переменных окружения. Переменные окружения представляют собой именованные значения параметров, которые операционная система (точнее, процесс-родитель) передает запущенной программе. Программа может с помощью специальных функций (их мы рассмотрим в следующей главе на примерах) получить значение любой установленной переменной окружения, указав ее имя. Именно так и должен поступать CGI-сценарий, когда захочет узнать значение того или иного заголовка запроса. К сожалению, набор передаваемых сценарию переменных окружения ограничен стандартами, и некоторые заголовки нельзя получить из сценария никаким способом. Такие случаи мы будем оговаривать особо.

Если быть до конца честными, то все-таки системный администратор может настроить сервер так, чтобы он посылал сценарию и те заголовки, которые по стандарту не передаются. Однако это далеко выходит за рамки Web-программирования.

Далее приводятся некоторые заголовки запросов с их описаниями, а также имена переменных окружения, которые использует сервер для передачи их CGI-сценарию. Мы указываем заголовки вместе с примерами в том контексте, в котором они могут быть применены, иными словами, вместе с наиболее распространенными их значениями. Так будет несколько нагляднее.

□ Формат:

get сценарий?параметры нттр/1.о

□ Переменные окружения: requestjjri; в переменной query_string сохраняется значение параметры, в переменной request_method — ключевое слово get.

Этот заголовок является обязательным (если только не применяется метод post) и определяет адрес запрашиваемого документа на сервере. Также задаются параметры, которые пересылаются сценарию (если сценарию ничего не передается, или же это обычная статическая страница, то все символы после знака вопроса и сам знак опускаются). Вместо строки нттр/i.o может быть указан и другой протокол — например, нттр/1.1. Именно его соглашения и будут учитываться сервером при обработке данных, поступивших от пользователя, и других заголовков.

Строка сценарий!параметры задается в том же самом формате, в котором она входит в URL. Неплохо было бы назвать эту строку как-нибудь более реалистично, чтобы учесть возможность присутствия в ней командных параметров. Такое название действительно существует и звучит как URI (Universal Resource Identifier, универсальный идентификатор ресурса). Очень часто его смешивают с понятием URL (вплоть до

GET

Гпава 2. Интерфейс CGI и HTTP

63

того, что это происходит даже в официальной документации по стандартам HTTP). Давайте договоримся, что в будущем мы всегда будем называть словом URL полный путь к некоторой Web-странице вместе с параметрами, и условимся, что под словом URI будет пониматься его часть, расположенная после имени (или IP-адреса) хоста и номера порта.

POST

□ Формат:

POST сценарий!параметры HTTP/1.0

□ Переменные окружения: requestjjri; в переменной queryj^tring сохраняется значение параметры, в переменной request_method — слово post.

Этот заголовок используется при передаче данных методом POST. Вскоре мы рассмотрим данный метод подробнее, а пока скажем лишь, что он отличается от метода GET тем, что данные можно передавать не только через командную строку, но и в самом конце, после всех заголовков.

Content-Type

□ Формат:

Content-Type: application/x-www-form-urlencoded

□ Переменная окружения: contentjtype

Данный заголовок идентифицирует тип передаваемых данных. Обычно для этого указывается значение appiication/x-www-form-uriencoded, определяющее формат, в котором все управляющие символы (отличные от алфавитно-цифровых и других отображаемых) специальным образом кодируются. Это тот самый формат передачи, который используется методами GET и POST. Довольно распространен и другой формат: multipart/form-data. Мы разберем его, когда будем обсуждать вопрос, касающийся загрузки файлов на сервер.

Хотим обратить ваше внимание на то, что сервер никак не интерпретирует рассматриваемый заголовок, а просто передает его сценарию через переменную окружения.

Host

□ Формат:

Host: имя_хоста

□ Переменная окружения: http_host.

В соответствии с протоколом HTTP 1.1 в Интернете на каждом узле может располагаться сразу несколько хостов. (Напоминаем, что узел имеет отдельный IP-адрес, и вполне типична ситуация, когда разные доменные имена соответствуют одному и тому же IP-адресу.) Поэтому должен существовать какой-то способ, с помощью которого браузер сможет сообщить серверу, к какому хосту он собирается обращаться. Заголовок Host как раз и предназначен для этой цели. В нем браузер указывает то же самое имя хоста, которое ввел пользователь в адресной строке.




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006