Литература

6.1 Служба WWW

Служба WWW (World Wide Web) - предназначена для обмена гипертекстовой информацией.

Проект был предложен в 1989 году. В 1993 появился первый браузер.

WWW построена по схеме "клиент-сервер".

Браузер (Internet Explorer, Opera ...) является мультипротокольным клиентом и интерпретатором HTML. И как типичный интерпретатор, клиент в зависимости от команд (тегов) выполняет различные функции. В круг этих функций входит не только размещение текста на экране, но обмен информацией с сервером по мере анализа полученного HTML-текста, что наиболее наглядно происходит при отображении встроенных в текст графических образов.

Сервер HTTP (Apeche, IIS ...) обрабатывает запросы клиента на получение файла (в самом простом случае).

6-1

Взаимодействие клиент и сервера по протоколу HTTP.

В начале служба WWW базировалась на трех стандартах:

  • HTML (HyperText Markup Lan-guage) - язык гипертекстовой разметки документов ;

  • URL (Universal Resource Locator) - универсальный способ адресации ресурсов в сети ;

  • HTTP (HyperText Transfer Protocol) - протокол обмена гипертекстовой информацией.

Позже добавили:

  • CGI (Common Gateway Interface) - универсальный интерфейс шлюзов. Создан для взаимодействия HTTP - сервера с другими программами, установленными на сервере (например, СУБД).

6.2 Протокол HTTP

Первый документ (но не стандарт) - RFC1945 (Hypertext Transfer Protocol -- HTTP/1.0 T. Berners-Lee, R. Fielding, H. Frystyk May 1996)

Последняя версия - RFC2616 (Hypertext Transfer Protocol -- HTTP/1.1 R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee June 1999)

Hypertext Transfer Protocol - протокол передачи гипертекста, протокол высокого уровня (а именно, уровня приложений).
. Используется службой WWW для передачи Web-страниц.

Протокол HTTP определяет запрос-ответный способ взаимодействия между программой-клиентом и программой-сервером в рамках технологии World Wide Web. Ниже приведены примеры запроса клиента и ответа сервера:

6-4

Листинг запроса и ответа HTTP

Установка соединения
Connecting to ipm.kstu.ru ...
Connected to ipm.kstu.ru [195.208.44.20]

Запрос клиента:
GET /internet/index.php HTTP/1.1 - (запрос файла и указание протокола HTTP/1.1)
Connection: close - (закрыть соединение после отправки файла)
Host: ipm.kstu.ru - (указание адреса сервера)
Accept: */* - (предпочтение типов данных)
Cache-Control: no-cache - (не кешировать)
Referer: http://ipm.kstu.ru/internet/ - (от куда пришел клиент)
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 95) - (название программы клиента)

Ответ сервера
HTTP/1.0 200 OK - (какой протокол используется, 200 - означает, что файл найден)
Date: Wed, 23 Oct 2002 08:32:31 GMT - (дата и время ответа)
Server: Apache/1.3.26 (Unix) PHP/4.1.2 rus/PL30.15 - (название, версия и модули http-сервера)
X-Powered-By: PHP/4.1.2 - (чем создана страница)
Connection: close - (закрыть соединение после получения файла)
Content-Type: text/html; charset=windows-1251 - (тип данных html, кодировка windows-1251)

Дальше идет содержимое файла (тело запроса).

Работа по протоколу HTTP происходит следующим образом: программа-клиент устанавливает TCP-соединение с сервером (стандартный номер порта-80) и выдает ему HTTP-запрос. Сервер обрабатывает этот запрос и выдает HTTP-ответ клиенту.

HTTP-запрос состоит из заголовка запроса и тела запроса, разделенных пустой строкой. Тело запроса может отсутствовать.

Заголовок запроса состоит из главной (первой) строки запроса и последующих строк, уточняющих запрос в главной строке. Последующие строки также могут отсутствовать.

Запрос в главной строке состоит из трех частей, разделенных пробелами:

1) Метод (иначе говоря, команда HTTP):

GET - Метод GET служит для получения любой информации, в соответствии URI-запроса.

HEAD - запрос заголовка документа. Отличается от GET тем, что выдается только заголовок запроса с информацией о документе. Сам документ не выдается.

POST - этот метод применяется для передачи данных CGI-скриптам. Сами данные следуют в последующих строках запроса в виде параметров.

PUT - поместить документ на сервере. Запрос с этим методом имеет тело, в котором передается сам документ.


DELETE - используется для удаления ресурсов, идентифицированных с помощью URI-запроса

2) Ресурс - это путь к определенному файлу на сервере (называется URI), который клиент хочет получить (или разместить - для метода PUT). Если ресурс - просто какой-либо файл для считывания, сервер должен по этому запросу выдать его в теле ответа. Если же это путь к какому-либо CGI-скрипту, то сервер запускает скрипт и возвращает результат его выполнения. Кстати, благодаря такой унификации ресурсов для клиента практически безразлично, что он представляет собой на сервере.

3) Версия протокола - версия протокола HTTP, с которой работает клиентская программа.

Строки после главной строки запроса имеют следующий формат:

Параметр: значение.

Таким образом, задаются параметры запроса. Это является необязательным, все строки после главной строки запроса могут отсутствовать; в этом случае сервер принимает их значение по умолчанию или по результатам предыдущего запроса (при работе в режиме Keep-Alive).

6.2.1 Некоторые параметры HTTP-запроса:

Connection (соединение) - может принимать значения Keep-Alive и close. Keep-Alive ("оставить в живых") означает, что после выдачи данного документа соединение с сервером не разрывается, и можно выдавать еще запросы. Большинство браузеров работают именно в режиме Keep-Alive, так как он позволяет за одно соединение с сервером "скачать" html-страницу и рисунки к ней. Будучи однажды установленным, режим Keep-Alive сохраняется до первой ошибки или до явного указания в очередном запросе Connection: close.
close ("закрыть") - соединение закрывается после ответа на данный запрос.

User-Agent - значением является "кодовое обозначение" браузера, например:

Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt)

Accept - список поддерживаемых браузером типов содержимого в порядке их предпочтения данным браузером, например:

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*

Это, очевидно, нужно для случая, когда сервер может выдавать один и тот же документ в разных форматах.

Значение этого параметра используется в основном CGI-скриптами для формирования ответа, адаптированного для данного браузера.

Referer - URL, с которого перешли на этот ресурс.

Host - имя хоста, с которого запрашивается ресурс. Полезно, если на сервере имеется несколько виртуальных серверов под одним IP-адресом. В этом случае имя виртуального сервера определяется по этому полю.

Accept-Language - поддерживаемый язык. Имеет значение для сервера, который может выдавать один и тот же документ в разных языковых версиях.

6.2.2 Формат HTTP-ответа:

Формат ответа очень похож на формат запроса: он также имеет заголовок и тело, разделенное пустой строкой.

Заголовок также состоит из основной строки и строк параметров, но формат основной строки отличается от таковой в заголовке запроса.

Основная строка запроса состоит из 3-х полей, разделенных пробелами:

Версия протокола - аналогичен соответствующему параметру запроса.

6.2.3 Код возврата (ошибки, состояния) - кодовое обозначение "успешности" выполнения запроса.

Например, код 200 означает "все нормально" (OK).

Значения кодов возврата по первой цифре:
1xx: Информационный - Не используется, но зарезервирован для использования в будущем
2xх: Успех - Запрос был полностью получен, понят, и принят к обработке.
3xx: Перенаправление - Клиенту следует предпринять дальнейшие действия для успешного выполнения запроса. Необходимое дополнительное действие иногда может быть выполнено клиентом без взаимодействия с пользователем, но настоятельно рекомендуется, чтобы это имело место только в тех случаях, когда метод, использующийся в запросе безразличен (GET или HEAD).
4xx: Ошибка клиента - Запрос, содержащий неправильные синтаксические конструкции, не может быть успешно выполнен. Класс 4xx предназначен для описания тех случаев, когда ошибка была допущена со стороны клиента. Если клиент еще не завершил запрос, когда он получил ответ с Статус-Кодом- 4xx, он должен немедленно прекратить передачу данных серверу. Данный тип Статус-Кодов применим для любых методов, употребляющихся в запросе.
5xx: Ошибка Сервера - Сервер не смог дать ответ на корректно поставленный запрос. В этих случаях сервер либо знает, что он допустил ошибку, либо не способен обработать запрос. За исключением ответов на запросы HEAD, сервер посылает описание ошибочной ситуации и то, является ли это состояние временным или постоянным, в Содержание-Ответа. Данный тип Статус-Кодов применим для любых методов, употребляющихся в запросе.

Наиболее часто встречающиеся:
"200"; OK - документ отправлен.
"404"; Not Found - документ не найден (ошибка URL), клиент должен проверить правильность написания URL, если не помогает, значит, документ уже удален.
"500"; Internal Server Error - внутренняя ошибка сервера, клиент исправить не может, только администратор сервера.

Словесное описание ошибки - "расшифровка" предыдущего кода. Например, для 200 это OK, для 500 - Internal Server Error.

Таблица кодов возврата

Код Название Описание
100 Продолжайте Клиент должен продолжать передачу запроса.
101 Переключение протоколов Сервер предлагает изменить протокол на указанный в поле заголовка отклика Update. Обычно это предложение о переходе на более новую версию HTTP.
110 Отклик мог устареть Отклик является устаревшим (используется в заголовке Warning).
111 Обновление не удалось Отклик от кэша не является свежим, т. к. попытка обновить его закончилась неудачей (используется в заголовке Warning).
112 Разрыв соединения Кэш был умышленно отсоединен от остальной сети на некоторое время (используется в заголовке Warning).
113 Эвристическое устаревание Кэш эвристически выбрал период обновления, больший 24 часов, и возраст отклика более 24 часов (используется в заголовке Warning).
199 Различные предупреждения Дополнительные предупреждения, не содержащиеся в данном списке (используется в заголовке Warning).
200 OK Запрос был успешно обработан. Содержимое отклика зависит от типа запроса.
201 Создано Запрос был успешно обработан и в результате был создан новый ресурс. Его URI указан в поле заголовка отклика Location.
202 Принято Запрос был принят, и его обработка началась другим асинхронным процессом, поэтому сервер не сможет сообщить о ее завершении.
203 Неавторитетная информация Возвращаемая метаинформация получена не от сервера ее происхождения, а из локальной копии.
204 Нет содержимого Сервер выполнил запрос, но ему нечего возвращать клиенту. Обозреватель не должен изменять отображение документа.
205 Сброс содержимого Сервер выполнил запрос, и обозреватель должен сбросить отображение документа.
206 Частичное содержимое Сервер выполнил частичный запрос GET для ресурса.
214 Применено преобразование Применено преобразование, изменившее кодировку или тип MIME отклика (используется в заголовке Warning).
299 Различные настойчивые предупреждения Дополнительные предупреждения, не содержащиеся в данном списке (используется в заголовке Warning).
300 Несколько вариантов Запрошенный ресурс имеет несколько представлений, и клиент должен выбрать одно из них.
301 Ресурс перенесен Запрошенный ресурс сменил свой URI. Его новый URI указан в поле заголовка отклика Location.
302 Найдено Запрошенный ресурс временно сменил свой URI.
303 Смотри другое Отклик на данный запрос может быть найден под другим URI, указанным в поле заголовка отклика Location.
304 Не изменено Клиент выполнил условный запрос GET, доступ разрешен, но документ не был изменен.
305 Используйте прокси Доступ к запрошенному ресурсу возможен только через прокси-сервер, указанный в поле заголовка отклика Location.
306 зарезервирован
307 Временное перенаправление Запрошенный ресурс временно находится под другим URI, указанном в поле заголовка отклика Location.
400 Неверный запрос Запрос не был понят сервером из-за его неверного синтаксиса.
401 Нет права доступа Запрос требует авторизации доступа, тип которой указан в поле заголовка отклика WWW-Authenticate.
402 Требуется платеж Зарезервировано для следующих версий HTTP.
403 Запрещено Сервер понял запрос, но отказался его выполнять.
404 Не найдено Ресурс, заданный в URI запроса, не найден.
405 Недопустимый метод Данный тип запроса не применим к ресурсу, заданному в URI запроса.
406 Неприемлемо Ресурс, заданный в URI запроса, может генерировать только отклики, не приемлемые для клиента.
407 Прокси требует авторизации доступа Прокси-сервер требует авторизации доступа, тип которой указан в поле заголовка отклика Proxy-Authenticate.
408 Таймаут запроса Клиент не послан ни одного запроса в течение отведенного ему интервала.
409 Конфликт Запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса.
410 Ресурс исчез Запрошенного ресурса больше нет на сервере, и сервер не знает его нового URI.
411 Требуется длина запроса В запросе не задано поле заголовка Content-Length.
412 Условие ложно Условие, заданное в заголовке условного запроса, не может быть выполнено.
413 Слишком длинное тело запроса Тело запроса длиннее, чем допускает сервер.
414 Слишком длинное URI запроса URI запроса длиннее, чем допускает сервер.
415 Не поддерживаемый тип устройства Формат тела запроса не поддерживается данным ресурсом для данного типа запроса.
416 Запрошенный диапазон пуст Запрошенный ресурс не содержит значений в диапазоне, заданном в поле заголовка запроса Range.
417 Предположение не оправдалось Предположение, указанное в поле заголовка запроса Expect, отвергнуто сервером.
500 Внутренняя ошибка сервера Запрос не исполнен из-за неожиданной ошибки сервера.
501 Не реализовано Сервер не поддерживает данный тип запросов.
502 Плохой шлюз Сервер, выступающий в роли шлюза или прокси-сервера, получил неверный отклик от следующего сервера.
503 Служба недоступна Сервер временно не может исполнить запрос из-за перегрузки.
504 Таймаут шлюза Сервер, выступающий в роли шлюза или прокси-сервера, не получил своевременного отклика от следующего сервера.
505 Версия HTTP не поддерживается Сервер не поддерживает версию HTTP, указанную в заголовке запроса.


6.2.3 Некоторые параметры http-ответа:

Connection - этот ответ аналогичен соответствующему параметру запроса.

Если сервер не поддерживает Keep-Alive (есть и такие серверы), то значение Connection в ответе всегда close.

Content-Type - содержит обозначение типа содержимого ответа в MIME.

В зависимости от значения Content-Type браузер воспринимает ответ как HTML-страницу, картинку gif или jpeg, как файл, который надо сохранить на диске, или как что-либо еще и предпринимает соответствующие действия.

Некоторые типы содержимого:

text/html - текст в формате HTML (веб-страница);
text/plain - простой текст (аналогичен "блокнотовскому");
image/jpeg - картинка в формате JPEG;
image/gif - то же, в формате GIF;

Также может передавать кодировку для текстовых данных.

Например:

charset=windows-1251

charset=koi8-rus

Content-Length - длина содержимого ответа в байтах (размер файла).

Last-Modified - дата и время последнего изменения документа.

6.2.4 Соединение к HTTP с помощью Telnet

Подсоединимся к командному порту HTTP (80), и запросим файл robots.txt:

6-5

6.3 Программа TeleportPro.

Бывают ситуации, когда необходимо работать с информацией с локального диска, например:

  • отсутствие доступа в Internet.

  • очень медленный канал.

  • перегруженный сервер.

  • очень большое количество документов.

  • создание резервной копии, вдруг сервер закроется.

  • для экономии при оплате канала, при выходе по модему.

  • т.д.

Для создания локальной копии сайта или части сайта, существуют специальные программы. Одна из них TeleportPro. Сервер разработчика http://www.tenmax.com/ .

Некоторые возможности программы:

  • задание глубины сканирования сайта, и внешних ссылок

  • задание типа файлов (расширение) для скачивания, например можно скачать только графику.

  • выставить лимит по размеру файла.

  • сканирование графических карт.

  • задание расписания работы, встроенный Scheduler.

  • задание название клиента, если есть ограничение для некоторых клиентов.

  • задание количества одновременно скачиваемых файлов.

Last modified: Wednesday, 13 July 2011, 4:23 PM