
- •Основы сокетов
- •Системные вызовы
- •Создание и уничтожение сокетов
- •Вызов connect
- •Отправка данных
- •Серверы
- •Локальные сокеты
- •Internet-Domain сокеты
- •Служба www
- •6.2 Протокол http
- •6.2.1 Некоторые параметры http-запроса:
- •6.2.2 Формат http-ответа:
- •6.2.3 Некоторые параметры http-ответа:
- •Протокол http
- •Структура протокола
- •Стартовая строка
- •Примеры диалогов http Обычный get-запрос
- •Перенаправления
- •Докачка и фрагментарное скачивание
- •Особенности протокола
- •Непостоянные соединения.
- •Постоянные соединения.
- •2.2.3. Формат сообщения http.
- •Http запрос.
- •Общий формат запроса.
- •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. Ниже приведены примеры запроса клиента и ответа сервера:
Установка соединения 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).