PHP в деталях

       

Структура запроса.


Рассмотрим, из чего состоит HTTP запрос. Все достаточно просто. Начнем с того, что HTTP запрос ? это вполне осмысленный текст. Из чего же он состоит в общем случае? Будем рассматривать протокол HTTP 1.0. Итак:

Request-Line [ General-Header | Request-Header | Entity-Header ]\r\n[ Entity-Body ]

  • Request-Line ? строка запроса

Формат: "Method Request-URI HTTP-Version\r\n"

Method ? метод, которым будет обрабатываться ресурс Request-URI, может быть GET, POST, PUT, DELETE или HEAD.

Request-URI ? относительная или абсолютная ссылка на страницу с набором параметров, например, /index.html или http://www.myhost.ru/index.html или /index.html?a=1&b=qq. В последнем случае серверу будет передан запрос с набором переменных a и b с соответствующими значениями, а знак "&" ? амперсант служит разделителем между параметрами.

HTTP-Version ? версия HTTP протокола, в нашем случае "HTTP/1.0".

Нам крайне интересны методы обработки GET и POST. Методом GET можно просто передать параметры в скрипт, а методом POST можно эмулировать submit формы.

Для метода GET, Request-URI может выглядеть, например, так: "/index.html?param1=1&param2=2".

  • General-Header ? главная часть заголовка.

Формат: [Date: value\n | Pragma: no-cache\n]

Может иметь только два параметра: Date или Pragma. Date ? дата по Гринвичу в формате "День недели, Число Месяц Год ЧЧ:ММ:СС GMT", например, "Tue, 15 Nov 1994 08:12:31 GMT" ? дата создания запроса. Pragma может иметь одно значение no-cache, которое запрещает кэширование страницы.

Request-Header ? часть заголовка, описывающая запрос.

Request-Header может иметь следующие параметры: Allow, Authorization, From, If-Modified-Since, Referer, User-Agent.

В данной главе мы не будем рассматривать параметр Autorization, так как он используется для доступа к закрытым ресурсам, что требуется не так уж часто. Вы можете самостоятельно изучить формирование заголовка для авторизованного доступа на сайте www.w3c.org.




Allow ? задает допустимые методы обработки.

Формат: "Allow: GET | HEAD\n".

Параметр игнорируется при указании метода обработки POST в Request-Line. Задает допустимые методы обработки запроса. Прокси сервера не модифицируют параметр Allow и он в неизменном виде доходит до сервера.

From ? e-mail адрес, пославшего запрос.

Формат: "From: adderss\r\n".

Например, "From: myname@mailserver.ru\r\n".

If-Modified-Since ? указывает, что запрос не модифицировался с такого-то времени.

Формат: "If-Modified-Since: date\r\n"

Используется только для метода обработки GET. Дата указывается по Гринвичу в таком же формате, как и для параметра Date в General-Header.

Referrer ? абсолютная ссылка на страницу, с которой произошла инициация запроса, т. е. ссылка на страницу, с которой пользователь перешел на нашу.

Формат: "Referrer: url\n".

Пример: "Referrer: www.host.ru/index.html\n".

User-Agent ? тип браузера.

Например: "User-Agent: Mozilla/4.0\n"

Entity-Header ? часть заголовка, описывающая данные Entity-Body.

В данной части запроса задаются параметры, которые описывают тело страницы. Entity-Header может содержать следующие параметры: Allow, Content-Encoding, Content-Length, Content-Type, Expires, Last-Modified, extension-header.

Allow ? параметр аналогичный Allow из General-Header.

Content-Encoding ? тип кодирования данных Entity-Body.

Формат: "Сontent-Encoding: x-gzip | x-compress | другой тип\n".

Пример: "Сontent-Encoding: x-gzip\n". Символ "|" означает слово "или", то есть то или то или то и.т.д.

Другой тип может указывать на способ кодирования данных, например, для метода POST: "Сontent-Encoding: application/x-www-form-urlencoded\n".

Content-Length ? количество байт, пересылаемых в Entity-Body. Значение Content-Length имеет совсем другой смысл для данных, пересылаемых в формате MIME, где он выступает как параметр описания части данных ? "external/entity-body". Допустимыми являются целые числа от нуля и больше.



Пример: "Content-Length: 26457\n".

Content-Type ? тип передаваемых данных.

Например: "Content-Type: text/html\n".

Expires ? Время, когда страница должна быть удалена из кэша браузера.

Формат: "Expires: date\n". Формат даты алогичен формату даты для параметра Date из General-Header.

Last-Modified ? время последнего изменения пересылаемых данных.

Формат: "Last-Modified: date\n". Формат даты алогичен формату даты для параметра Date из General-Header.

Extention-header ? часть заголовка, которая может предназначаться, например, для обработки браузером, или другой программой, которая принимает документ. В данной части можно описывать свои параметры в формате "ParameterName: parametervalue\n". Данные параметры будут игнорироваться, если программа-клиент не знает, как их обработать.

Например: "Cookie: r=1\r\n" ? устанавливает всем известные печеньки для страницы.

А теперь после таких страшных слов давайте попробуем немного успокоиться и понять, что же нам надо? Понимать мы естественно будем на примерах.

Давайте представим, что нам надо получить страницу с сайта, передав Cookies (Печеньки), иначе нас просто пошлют как незванных гостей, и более того, известно, что на данную страницу пускают только после того, как Вы побывали на главной странице сайта.


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