Скачиваний:
100
Добавлен:
09.05.2014
Размер:
601.5 Кб
Скачать

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

Рассмотрим, из чего состоит 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 (Печеньки), иначе нас просто пошлют как незванных гостей, и более того, известно, что на данную страницу пускают только после того, как Вы побывали на главной странице сайта.

Соседние файлы в папке лабораторная работа 5 (html, css, js)