
- •Основы сокетов
- •Системные вызовы
- •Создание и уничтожение сокетов
- •Вызов 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 ответ.
- •Общий формат ответа.
- •Что такое сокеты?
Особенности протокола
Большинство протоколов предусматривают установление TCP-сессии, в ходе которой один раз происходит авторизация, и дальнейшие действия выполняются в контексте этой авторизации. HTTP же устанавливает отдельную TCP-сессию на каждый запрос; в более поздних версиях HTTP было разрешено делать несколько запросов в ходе одной TCP-сессии, но браузеры обычно запрашивают только страницу и включённые в неё объекты (картинки, каскадные стили и т. п.), а затем сразу разрывают TCP-сессию. Для поддержки авторизованного (неанонимного) доступа в HTTP используются cookies; причём такой способ авторизации позволяет сохранить сессию даже после перезагрузки клиента и сервера.
При доступе к данным по FTP или по файловым протоколам тип файла (точнее, тип содержащихся в нём данных) определяется по расширению имени файла, что не всегда удобно. HTTP перед тем, как передать сами данные, передаёт в заголовке строчку «Content-Type: тип/подтип», позволяющую клиенту однозначно определить, каким образом обрабатывать присланные данные. Это особенно важно при работе с CGI-скриптами, когда расширение имени файла указывает не на тип присылаемых клиенту данных, а на необходимость запуска данного файла на сервере и отправки клиенту результатов работы программы, записанной в этом файле (при этом один и тот же файл в зависимости от аргументов запроса и своих собственных соображений может порождать ответы разных типов — в простейшем случае картинки в разных форматах).
Кроме того, HTTP позволяет клиенту прислать на сервер параметры, которые будут переданы запускаемому CGI-скрипту. Для этого же в HTML были введены формы.
Перечисленные особенности HTTP позволили создавать поисковые машины (первой из которых стала AltaVista, созданная фирмой DEC), форумы и Internet-магазины. Это превратило Internet из «академической игрушки» в «коммерческий сервис»: появились компании, основным полем деятельности которых стало предоставление доступа в Internet (компании-провайдеры) и создание сайтов.
HTTP может использовать как постоянные (persistent), так и непостоянные (nonpersistent) TCP соединения.
Непостоянные соединения.
Рассмотрим шаги передачи от сервера к клиенту в случае непостоянных соединений. Пусть страница состоит из базового HTML файла и 10 JPEG рисунков, все эти 11 объектов находятся на том же самом сервере. Пусть URL-сервер имеет вид www.petrsu.ru/cs/index.html, происходит следующее:
HTTP клиент инициирует TCP соединение к серверу www.petrsu через порт 80, который постоянно прослушивается сервером.
HTTP клиент посылает HTTP запрос к серверу через конкретное гнездо ассоциированное с TCP соединением, которое было установлено на первом шаге. Этот запрос включает имя файла к файловой системе (структура запросов через HTTP будет рассмотрена позже).
Сервер получает запрос через тоже самое гнездо, читает запрашиваемый объект в своей памяти, инкапсулирует его в HTTP ответ и посылает ответ клиенту через тоже самое гнездо.
Сервер сообщает TCP о необходимости закрыть соединение (TCP реально закроет соединение, только после полного получения ответа клиентом).
Клиент получает ответ. TCP соединение закрывается. В ответе указано, что инкапсулированным объектом является HTML файл. Клиент извлекает этот файл из ответа, выполняет синтаксический анализ HTML файла и находит там HTML ссылки на 10 JPEG рисунков.
Первые четыре шага повторяются для каждой ссылки на JPEG объекты.