Протокол работы с WWW - HTTP.

HTTP (Hypertext Transfer Protocol, Протокол передачи гипертекста) представляет собой протокол прикладного уровня. HTTP обеспечивает высокопроизводительный механизм тиражирования информации мультимедийных систем независимо от типа представления данных. Протокол построен по объектно-ориентированной технологии и может использоваться для решения различных задач, например, работы с серверами имен или управления распределенными информационными системами. На настоящий момент наиболее распространенной является спецификация протокола "HTTP/1.0".

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

Хотя Internet была основана еще в конце 60-х годов, о Web никто не слышал до марта 1989 года. Тим Бернес-Ли, создатель Web, во время своей работы в лаборатории физики частиц института CERN в Женеве, ощутил потребность в распространении информации по физике высоких энергий для исследователей по всему миру. И он предложил гипертекстовую систему связи для компьютеров. Эта система позволяла его коллегам связывать документы по компьютерной сети, чтобы распространить свои научные находки. CERN способствовал развитию Web, со временем превратив его из локальной сети в глобальную общемировую сеть. Так же как Pony Express превратилась в Почтовую Службу США, так и первоначальная концепция гипертекстовой системы расширилась из рамок общества физиков до World Wide Web.

Первый раз Web начали использовать в январе 1992 года в Женеве (Швейцария), где исследователи могли получить данные Web с узла CERN. Бернес-Ли предложил хранить документы на компьютерах, которые он назвал серверами Web.

С 1990 года протокол HTTP используется информационной системой WWW в качестве одного из основных протоколов работы.

Сервисы WWW.

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

URI (Uniform Resource Identifier, Идентификатор ресурса), URL (Uniform Resource Locator, Местонахождение ресурса), URN (Uniform Resource Name, Имя ресурса) - разные имена одного и того же сервиса, который предназначен для идентификации типов, методов работы и компьютеров, на которых находятся определенные ресурсы, доступные через Internet. Этот сервис состоит из трех частей:

Например, файл "mac.html", расположенный на WWW-сервере факультета ВМиК, представляет собой ресурс с идентификатором: http://cmc.cs.msu.su/curr/cn/mac.html. Это означает, что будет использоваться тип доступа через HTTP, схема доступа отделена двоеточием ":" и указывает на использование протокола HTTP, следующие два слэша отделяют последующий адрес сервера cmc.cs.msu.su; выгружаемый файл с именем /curr/cn/mac.html - путь к запрашиваемому файлу.

Другими словами, URL, URI и URN - это способ для согласованной идентификации ресурсов в Internet.

URI ресурса может содержать не только имя ресурса, но и параметры, необходимые для его работы. Имя ресурса отделено от строки параметров символом "?". Строка параметров состоит из лексем, разделяемых символом "&". Каждая такая лексема состоит из имени параметра и его значения, разделенных символом "=". Символы, не входящие в набор символов ASCII, заменяются знаком "%" и шестнадцатеричным значением этого символа. Для указанного ресурса вся строка параметров является одним строковым параметром, поэтому тип, очередность или уникальность имен отдельных параметров строки не существенны.

HyperText Markup Language (HTML) - это язык описания содержащейся на WWW информации. HTML-файл представляет собой обычный ASCII-текст, содержащий специальные коды, которые обозначают присоединенную к файлу графику, видео, аудио информацию или исполняемые коды среды просмотра информации - Web browser - Java Script, Java Classes. Вся эта информация хранится в файлах на WWW-сервере. Когда Web browser получает доступ к этому файлу, он сначала интерпретирует закодированную в HTML-файле информацию, а затем предоставляет для пользователя всю информацию в графическом или текстовом виде Web-страниц.

HyperText в HTML - основная концепция размещения информации на WWW. HyperText или hyperlinks (гиперссылки), содержит связи (URL) внутри текстового документа, которые позволяют пользователю быстро переходить от одной части документа к другой или к другому документу.

WWW перенимает концепцию файлов с гиперссылками и использует ее на другом уровне, установив гиперссылку между Web-страницами и WWW-узлами. Щелкнув мышью на одном из объектов гиперссылки на одной Web-странице, пользователь может не только передвигаться внутри одного WWW-узла между его Web-страницами, но и перемещаться на другие WWW-узлы с другими ресурсами, расположенные в другом месте и, вероятно, использующие другие методы. Это открывает возможности навигации по Internet, несуществовавшей до появления WWW-серверов.

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

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

Common Gateway Interface (CGI) - это стандарт расширения функциональности WWW, позволяющий WWW-серверам выполнять программы, аргументами работы которых может управлять пользователь. WWW-серверы позволяют запрашивать статические HTML Web-страницы и просматривать их с помощью Web browser. CGI расширяет возможности пользователя и позволяет выполнять программы, ассоциированные с данной Web-страницей и предоставляет возможность получения динамической информации из WWW-сервера.

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

Чаще всего CGI используется для выборки информации из баз данных. Пользователь вводит запрос в Web-страницу; WWW-сервер его читает, передает соответствующему приложению или запускает процесс для его обработки, получает результат запроса и показывает его пользователю.

Механизм CGI полностью платформенно - независимый и может передавать данные между любыми WWW-серверами, поддерживающими механизм CGI. Поскольку CGI основан на исполняемых файлах, нет ограничений на тип программы, которая будет исполняться в CGI. Программа может быть написана на любом из языков программирования, позволяющем создавать исполняемые модули, С/С++, FORTRAN, Pascal, Visual Basic или PowerBuilder. CGI-программа также может быть написана с использованием командных языков операционных систем, таких как Perl или Shell.

В последнее время бурно развивается тенденция активных серверных страниц, так называемых ASP. По сути это использование того же самого стандарта CGI, только на уровне объектно-ориентированного подхода к построению Web-страниц.

Принципы построения HTTP-соединения

Протокол HTTP построен по модели "запрос-ответ". Иными словами, клиент устанавливает соединение с сервером и отправляет запрос. В нем указан тип запроса, URL (URI, URN), версия протокола HTTP (поскольку формат запроса может меняться от версии к версии) и содержание запроса: информация клиента (параметры) и, возможно, сопровождающая информация или тело сообщения. Сервер HTTP отвечает строкой статуса обработки запроса, которая содержит: версию поддерживаемого протокола, код обработки запроса или код ошибки и возвращаемую по запросу информацию. Информация тела сообщения как клиента, так и сервера должна быть представлена в MIME-формате.

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

В более сложной ситуации, в процессе передачи данных принимают участие несколько промежуточных объектов (рис.). Они могут быть трех видов: proxy (промежуточный агент), gateway (шлюз) и tunnel (туннель):

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

Каждый из объектов - участников соединения, за исключением туннеля, может поддерживать внутренний кэш запросов и ответов.

Эффект от использования кэша состоит в том, что он уменьшает длину цепочки и, тем самым, уменьшает время соедиения.

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

HTTP - это протокол прикладного уровня, который, как правило, работает поверх стека TCP/IP, хотя , как всякий протокол прикладного уровня, может работать на любом другом транспорте, обеспечивающем надежное и достоверное соединение. При работе по ТСР сервер HTTP использует, как правило, порт 80, хотя возможно использование и других портов.

HTTP-соединение должно открываться клиентом перед каждым запросом и закрываться сервером после отправки ответа. Как клиент, так и сервер должны иметь ввиду, что соединение может быть преждевременно закрыто либо пользователем, либо по истечении времени соединения, либо из-за сбоя системы.

Методы запроса.

После установления TCP-соединения между клиентом и сервером HTTP, клиент отправляет на сервер запрос. В поле "METHOD" этого запроса содержится идентификатор метода обращения к HTTP-серверу. Метод определяет состав и структуру заголовков запроса, вид передачи и структуру параметров запроса. Наиболее распространенными методами являются "GET" и "POST". Иногда также используются методы "HEAD", "DELETE", "PUT".

Классы кодов ответов HTTP

Первая цифра кода статуса HTTP определяет класс кода ответа. Существуют пять возможных значений для первой цифры (от 1 до 5):

  • 1хх: Информационная
  • Не используется, но зарезервирована
  • 2хх: Успешно
  • Данные были успешно приняты, обработаны и использованы
  • 3хх: Перенаправление
  • Для выполнения запроса требуются дополнительные действия
  • 4хх: Ошибка клиента
  • Запрос содержит синтаксические ошибки либо неполон
  • 5хх: Ошибка сервера
  • Сервер не смог выполнить правильный запрос.

    Каждый из пяти классов содержит группу значений статуса кода. Ниже перечислены значения статуса кода для HTTP/1.0 и 1.1 и соответствующие им темы ответов. Темы ответов представляют собой рекомендованные значения и любой сервер может заменить их другим текстом без ущерба для HTTP. Встречаются не все приведенные коды статуса, но это говорит о том, что сервер может не обрабатывать все коды статуса.

    Методы аутентификации

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

    В не столь "суперсекретных" WWW-серверах применятся механизм SSL (Secure Sockets Layer), обеспечивающий дополнительное шифрование при передаче пароля, идентификатора пользователя и данных, передаваемых по соединению. SSL представляет собой самостоятельный протокол шифрования, поверх которого может работать как HTTP, так и, например, FTP и SMTP. SSL обеспечивает шифрование данных на уровне протоколов RSA, DES и MD5, в то же время он достаточно гибок для использования других методов шифрования.

    В 1996 году была стандартизована и с января 1997 года стала быстро распространяться новая версия HTTP - "HTTP/1.1". В этой версии значительно расширены возможности HTTP при управлении соединением и участвующих в нем агентов. В версии "HTTP/1.1"