Опубликовано

Протокол передачи гипертекста HTTP

В модели ARPANET всегда поддерживалась связь между компьютером-источником и компьютером-приемником. Основной принцип построения сети состоял в том, что любой компьютер мог связаться с любым другим компьютером. Передача данных между компьютерами была организована на основе протокола IP (Internet Protocol).

Сеть проектировалась таким образом, чтобы для работы в ней не требовалось никакой информации о конкретной структуре сети. Для передачи информации по сети компьютер-источник помещал данные в некий «конверт», указывал на этом «конверте» конкретный адрес компьютера-приемника и передавал получившийся в результате этих действий пакет в сеть.

Именно протокол IP, являющийся очень удачным способом организации связи между совершенно разными компьютерами (которые к тому же могут работать под управлением разных операционных систем), в дальнейшем и стал основой для создания и развития компьютерных сетей.

Многоуровневая сетевая модель

Для управления сетевым обменом данными используется несколько протоколов. Это обусловлено наличием большого количества правил, регламентирующих сетевое взаимодействие. Даже в простейшем случае, при передаче последовательности битов, необходимо разделить исходные данные на пакеты, к каждому пакету добавить служебную информацию (заголовок) и обеспечить его доставку. При приеме пакета необходимо проверить корректность данных и при необходимости организовать повторную передачу пакета. В более сложных случаях, при передаче каких-либо вполне конкретных данных (файлов, документов и т. п.), необходимо также включать в пакеты информацию о том, что представляет собой передаваемая последовательность битов и как ее интерпретировать на месте назначения.

Таким образом, при обмене информацией по сети требуется оговаривать множество деталей, поэтому протокол, реализующий все правила обмена данными, был бы чрезмерно сложным и неудобным в использовании. Поэтому применяют несколько протоколов, решающих задачу передачи данных на разных уровнях.

  • уровень сетевого доступа;
  • межсетевой уровень;
  • транспортный уровень;
  • уровень приложений.

Низшие уровни трактуют пакеты высших уровней как данные, к которым добавляется служебная информация для процесса соответствующего уровня на приемной стороне. При передаче же информации на более высокий уровень служебная информация более низкого уровня удаляется.

Уровень сетевого доступа

Уровень сетевого доступа является самым низким уровнем взаимодействия в сети. Данный уровень обеспечивает безошибочную передачу блоков данных. Только этот уровень оперирует такими элементами, как битовые последовательности, методы кодирования, маркеры. Уровень сетевого доступа несет ответственность за правильную передачу пакетов на участках между непосредственно связанными элементами сети и обеспечивает управление доступом к среде передачи. Вследствие своей сложности уровень сетевого доступа разделяется на два подуровня:

MAC (Medium Access Control) — управление доступом к среде;

LLC (Logical Link Control) — управление логической связью (каналом).

Уровень MAC управляет доступом к сети (с передачей маркера в сетях Token Ring или распознаванием конфликтов в сетях Ethernet) и обеспечивает управление сетью. Уровень LLC, действующий над уровнем MAC, и есть собственно тот уровень, который посылает и получает сообщения с данными.

Межсетевой уровень

Межсетевой уровень обеспечивает передачу данных в различные точки, разбросанные по всему миру. Различные части Интернета (отдельные локальные сети) соединяются между собой посредством компьютеров, которые называются узлами. Соединяемые сети могут быть сетями Ethernet, Token Ring, сетями на телефонных линиях и т. п. На узлах принимается решение о том, как перемешать данные (пакеты) по сети. Отдельные узлы сети не имеют прямых связей со всеми остальными узлами. Поэтому для работы такой системы необходимо, чтобы каждый узел имел информацию о существующих связях и о том, на какой из узлов следует передать пакет для его оптимальной передачи в точку назначения.

Для осуществления маршрутизации каждый узел имеет таблицу (называемую таблицей маршрутизации), где адресу точки назначения поставлен в соответствие адрес узла, на который следует послать данные. В Интернете составление и модификация таблиц маршрутизации (этот процесс тоже является частью маршрутизации и называется также маршрутизацией) определяются протоколами ICMP (Internet Control Message Protocol), RIP (Routing Internet Protocol) и OSPF (Open Shortest Path First). Узлы, выполняющие функции маршрутизации, называются маршрутизаторами,

Адресация пакетов на межсетевом уровне обеспечивается протоколом IP. В заголовок пакета помещается информация, называемая адресом IP, которой достаточно, чтобы определить, куда и как доставить пакет данных. IP-адрес состоит из четырех байт. При текстовой записи байты отделяются друг от друга точками, например 127.0.0.1.

Каждый компьютер, подключенный к Интернету, имеет уникальный адрес. Однако на межсетевом уровне определяется лишь сеть, в которой находится конкретный компьютер. Для определения места расположения в локальной сети компьютера с данным числовым IP-адресом локальные сети используют свои собственные протоколы сетевого уровня (например, локальные сети Ethernet для отыскания Ethernet-адреса по IP-адресу компьютера, находящегося в данной сети, использует протокол ARP).

Информация, пересылаемая по сетям IP, делится по границам байтов на пакеты. Размер пакета обычно лежит в диапазоне от 1 до 1500 байт.

Транспортный уровень

Транспортный уровень определяет правила поддержки сетевых соединений. Типичным протоколом транспортного уровня является протокол TCP (Transmission Control Protocol). Протокол TCP занимается проблемой пересылки больших объемов информации, основываясь на возможностях протокола IP. TCP делит информацию, которую надо переслать, на несколько частей и нумерует их, чтобы обеспечить возможность последующего восстановления. Каждая порция информации вместе с номером образует TCP-пакет, который затем помещается в отдельный IP-пакет, с которым сеть уже «умеет» обращаться.

Получатель (TCP-процесс) распаковывает IP-пакеты и получает TCP-пакеты, далее распаковывает их и объединяет данные. Если какой-то информации недостает, TCP требует переслать эту часть информации снова. Благодаря такой технологии информация собирается в нужном порядке и полностью восстанавливается.

При пересылке из-за наличия помех на линиях связи пакеты могут не только теряться, но и искажаться. Протокол TCP решает и эту проблему. Для этого используется специальная система кодов, исправляющих ошибки. Наиболее простым примером таких кодов является код, использующий добавление к каждому пакету контрольной суммы (а к каждому байту — бита контроля четности). При создании TCP-пакета вычисляется контрольная сумма, которая записывается в TCP-заголовок. Если при приеме информации вычисленная сумма не совпадает с той, что указана в заголовке, это свидетельствует о том, что при передаче произошла ошибка и следует переслать этот пакет заново.

Таким образом, протокол TCP обеспечивает гарантированную доставку пакетов, освобождая прикладные процессы от необходимости использовать режим ожидания и повторные передачи для обеспечения надежности

Уровень приложений

Уровень приложений определяет интерфейс между двумя системами на уровне приложений. На этом уровне определяется, как компьютер обрабатывает полученные данные. Для его поддержки разработано несколько протоколов, используемых для передачи вполне определенной информации:

передача гипертекстовых документов — протокол HTTP (Hypertext Transfer Protocol);

передача файлов — протокол FTP (File Transfer Protocol);

передача сообщений электронной почты — протоколы SMTP (Simple Mail Transfer Protocol) и POP (Post Office Protocol).

Особенностью протоколов уровня приложений является то, что обмен служебной информацией между ними производится в символьном виде.

Порты и службы

IP-адрес позволяет точно идентифицировать компьютер, но в ряде случаев этого недостаточно. Дело в том, что на каждом узле могут быть запущены самые разные службы Интернета, обеспечивающие передачу электронной почты, файлов, гипертекстовой информации и т. п. Каждая служба использует свой протокол прикладного уровня. Например, для передачи гипертекстовых документов используется протокол HTTP, передача файлов производится по протоколу FTP, для работы с электронной почтой используются протоколы SMTP, POPS и т. д.

Для упорядочения работы каждой службе отведен отдельный порт, представляющий собой число от 0 до 65534. Для наиболее популярных служб зарезервированы стандартные номера портов. Так, для FTP это 21, для HTTP — 80, SMTP — 25, РОРЗ — 110. Однако это всего лишь общепринятые значения по умолчанию, поэтому владелец узла может настроить эти службы на работу с совершенно другими портами. Часто это позволяет легко решать некоторые проблемы, например, обеспечить поддержку различных кодировок кириллицы в web. Для реализации этого достаточно предусмотреть автоматическую перекодировку документа на сервере в зависимости от того, с каким портом общается клиентское приложение.

Протокол передачи гипертекста HTTP

Программы, обеспечивающие работу WWW, используют для обмена данными протокол HTTP (напомним, что это протокол уровня приложений). Поэтому, если вы собираетесь заниматься разработкой web-приложений, необходимо получить хотя бы основные представления об этом протоколе.

Как уже отмечалось выше, протоколы приложений могут обмениваться только текстовой информацией. Для обеспечения возможности передачи двоичных файлов по протоколу HTTP используется спецификация MIME (Multipurpose Internet Mail Extension). Согласно спецификации MIME, формат данных описывается следующим образом:

<тип>/<подтип>

Тип определяет, какого рода информация содержится в двоичном файле (текст, приложение, изображение, видеозапись и т. п.), а подтип — формат файла.

Сеанс взаимодействия с сервером HTTP в наиболее общем виде состоит из следующих шагов:

  • установление TCP-соединения;
  • запрос клиента;
  • ответ сервера;
  • разрыв TCP-соединения.

Запрос клиента представляет собой просто требование на передачу HTML-документа или какого-либо другого ресурса. Ответ сервера — код запрашиваемого ресурса.

Запрос клиента

Запрос клиента состоит из четырех компонентов:

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

Строка состояния имеет следующий формат:

<метод эапроса> <URL ресурса> <версия протокола НTTP>

Прокомментируем отдельные структурные блоки этого формата:

Метод запроса определяет вид воздействия на ресурс, указанный с помощью URL. Наиболее важны два метода: GET и’POST:

метод GET предназначается для получения ресурса с указанным URL-адресом. При получении запроса GET сервер должен включить код ресурса в ответ клиенту. При этом ресурс не обязательно является гипертекстовым документом;

основное назначение метода POST — передача данных на сервер. Однако на практике метод POST может применяться по-разному, в том числе и для получения информации с сервера;

Версия протокола обычно задается в следующем формате:

HTTP/<верcия>

Например, при использовании версии HTTP 1.0 данная строка выглядит так:

НТТР/1.0

Поля заголовка используются для передачи серверу дополнительной информации. Каждое поле заголовка имеет следующий формат:

<иня поля>: <значение>

Рассмотрим назначение некоторых наиболее часто используемых полей заголовка:

  • Host — доменное имя или IP-адрес сервера, к которому обращается клиент;
  • From — адрес электронной почты пользователя;
  • Accept — МIME-типы данных, обрабатываемые клиентом. Может содержать несколько значений, разделяемых запятыми. Обычно используется для того, чтобы сообщить серверу о типах графических файлов, поддерживаемых клиентом;
  • Accept-Language — идентификаторы, с помощью которых сообщаются языки, поддерживаемые клиентом. Разделяются запятыми;
  • Accept-Charset — идентификаторы, сообщающие серверу о поддерживаемых клиентом кодировках. Разделяются запятыми;
  • Content-Type — MIME-тип данных, содержащихся в теле запроса;
  • Content-Length — число символов, содержащихся в теле запроса;
  • Connection — управляет TCP-соединением. Если в этом поле задано значение Close, то после обработки запроса соединение разрывается. Если задано значение Keep-Alive, то соединение сохраняется и может быть использовано для последующих запросов;
  • User-Agent — информация о клиенте.

Тело запроса в большинстве случаев отсутствует. Наиболее часто тело запроса используется в тех случаях, когда требуется передать серверу информацию, введенную пользователем.

Ниже приведен пример запроса:

GET http://www.a1tavista.com НТТР/1.0

Connection: Keep-Alive

User-Agent: Mozilla/4.04 [en] (Win95; I)

Host: www.altavista.com

Accept: image/gif, image/jpeg, image/png, *.*

Accept-Language: en, ru

Accept-Charset: IS08859-1, Winl251, *

Ответ сервера

С точки зрения web-программирования структура ответа сервера гораздо более важна, чем структура запроса клиента. Выполняющиеся на сервере программы (разработкой которых, собственно, и занимается web-программист), должны быть способны сами сформировать ответ клиенту.

Основные компоненты ответа полностью аналогичны компонентам запроса клиента и включают в себя следующие элементы:

  • строку состояния;
  • поля заголовка;
  • пустую строку;
  • тело запроса.

Строка состояния имеет следующий формат:

<версия протокола> <код ответа> <пояснения>

Здесь:

  • версия протокола задается в том же формате, что и в запросе клиента;
  • код ответа представляет собой трехзначное десятичное число, обозначающее результат обработки запроса клиента сервером;
  • пояснения представляют собой расшифровку кода ответа в символьном виде. Это просто строка символов, не обрабатываемая клиентом и предназначенная для системного администратора.

Коды ответов подразделяются на пять групп. Группа, к которой относится код ответа, определяется старшим разрядом кода:

1 — информационное сообщение. Означает, что сервер продолжает обработку запроса клиента. Используется довольно редко;

2 — сообщение об успешной обработке запроса клиента;

3 — сообщение о перенаправлении запроса;

4 — сообщение об ошибке в запросе клиента;

5 — сообщение об ошибке сервера.

Наиболее часто встречающиеся коды ответов приведены в табл. 20.1.

Поля заголовка в ответе сервера имеют такую же структуру, что и в запросе клиента. Наиболее важны следующие поля:

Server — наименование и номер версии web-сервера;

Allow — список методов, доступных для данного сервера;

Content-Language —перечень языков, которые должен поддерживать клиент для корректного отображения передаваемого ресурса;

Content-Type — MIME-тип данных, содержащихся в теле ответа сервера;

Content-Length — размер данных, содержащихся в теле ответа сервера;

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

Date — дата и время создания ответа сервера;

Expires — дата и время, определяющие момент, когда информация, переданная клиенту, считается устаревшей;

Location — адрес реального расположения ресурса. Используется для переадресации запроса;

Cache -Control — директивы управления кэшированием.

В теле ответа содержится код передаваемого клиенту ресурса. Это может быть HTML-документ или любой другой ресурс. Способ обработки ресурса указывается в поле заголовка Content-type.

Ниже приведен пример ответа сервера, полученный в ответ на запрос HTML-документа:

НТТР/1.1 200 ОК

Date: Sat. 11 Nov 2000 14:23:07 GMT

Server: Apache/1.3.6 (Unix) PHP/3.0.7 rus/PL28.12

Connection: close

Content-Type: text/html: charset-windows-1251

Expires: Thu. 01 Jan 1970 00:00:01 GMT

Last-Modified: Sat. 11 Nov 2000 14:24:44 GMT

Vary: accept-charset. user-agent

<html>

<head>

<meta name-«author» content-«WEBLab»>

<title>Novgorod On-Line. Добро пожаловать в Великий

Новгород.</title>

</head>

<STYLE TYPE-«text/Css»x!—

A {text-decoration: none}

—></STYLE>

Задания для самостоятельной работы

1. Что такое клиент и сервер в глобальной сети интернет?

2. Назовите прикладные протоколы в глобальной сети интернет?

3. Что такое порт соединения?

4. Опишите принцип работы браузера при обращении к Web-узлу?

5. Что такое HTML?

6. Что такое CSS?

7. Какие программы используются для разработки Web-страниц?