ПРОТОКОЛ HTTP
Протокол передачи гипертекста HTTP (Hypertext Transfer Protocol, RFC 1945, 2068) предназначен для передачи гипертекстовых документов от сервера к клиенту. Протокол HTTP относится к протоколам прикладного уровня. Согласно RFC, транспортным протоколом для него должен быть протокол с установлением соединения, надежной передачей данных и без сохранения границ между сообщениями. На практике в подавляющем большинстве случаев транспортным протоколом для HTTP является протокол TCP, причем сервер HTTP (сервер Web) находится в состоянии ожидания соединения со стороны клиента стандартно по порту 80 TCP, а клиент HTTP (браузер Web) является инициатором соединения.
В терминах Web все, к чему может получить доступ пользователь, – документы, изображения, программы, – называется ресурсами. Каждый ресурс имеет уникальный для Web адрес, называемый универсальным идентификатором ресурса (URI – Universal Resource Identifier). В самом общем случае URI выглядит следующим образом:
protocol://user:password@host:port/path/file?paremeters#fragment
Отдельные поля URI имеют следующий смысл:
protocol - прикладной протокол, посредством которого получают доступ к ресурсу;
user - пользователь, от имени которого получают доступ к ресурсу либо сам пользователь в качестве ресурса;
password - пароль пользователя для аутентификации при доступе к ресурсу;
host - IP-адрес или имя сервера, на котором расположен ресурс;
port - номер порта, на котором работает сервер, предоставляющий доступ к ресурсу;
path - путь к файлу, содержащему ресурс;
file - файл, содержащий ресурс;
parameters - параметры для обработки ресурсом-программой;
fragment - точка в файле, начиная с которой следует отображать ресурс.
Взаимодействие между клиентом и сервером Web осуществляется путем обмена сообщениями. Сообщения HTTP делятся на запросы клиента серверу и ответы сервера клиенту.
Сообщения запроса и ответа имеют общий формат. Оба типа сообщений выглядят следующим образом: сначала идет начальная строка (start-line), затем, возможно, одно или несколько полей заголовка, называемых, также, просто заголовками, затем пустая строка (то есть строка, состоящая из символов CR и LF), указывающая конец полей заголовка, а затем, возможно, тело сообщения:
начальная строка
поле заголовка 1
поле заголовка 2
...
поле заголовка N
CR LF
тело сообщения
Формат начальной строки клиента и сервера различаются и будут рассмотрены далее. Заголовки бывают четырех видов:
общие заголовки (general-headers), которые могут присутствовать как в запросе, так и в ответе;
заголовки запросов (request-headers), которые могут присутствовать только в запросе;
заголовки ответов (response-headers), которые могут присутствовать только в ответе;
заголовки объекта (entity-headers), которые относятся к телу сообщения и описывают его содержимое.
Каждый заголовок состоит из названия, символа двоеточия ":" и значения. Наиболее важные заголовки приведены в табл. 1.