HTTP

HTTP (HyperText Transfer Prоtocоl) - протокол передачи гипертекста. Специальный протокол для передачи данных, имеет прикладной уровень, первоначально был представлен в виде гипертекстовых документов.

В основе HTTP лежит технология «клиент-сервер», которая, как ясно из названия, предполагает наличие определенных потребителей, инициирующих соединение и отсылающих запросы, а также, соответственно, поставщиков, ожидающих получение запроса и производящих последующее соединение.

На сегодняшний день, HTTP широко применяется по Всемирной паутине для скачивания информации с веб-сайтов. Также, HTTP используется в виде «транспорта» для других протоколов (SOAP, XML-RPC, WebDAV).

Главным объектом манипуляции в протоколе HTTP выступает ресурс, на который в запросе клиента ссылается URI (Uniform Resource Identifier). Зачастую, эти ресурсы - ничто иное, как файлы, хранящиеся на определенном сервере. Впрочем, это могут быть и логические объекты. 

Характерным свойством протокола HTTP является возможность указать в запросе/ответе способ представления ресурса по различным параметрам (формату, кодировке, языку и прочее). Для этих целей применяется HTTP-заголовок. За счет возможности указать способ кодирования сообщения клиент и сервер могут осуществлять обмен двоичными данными, впрочем такой протокол является текстовым.

Аналогичными протоколу HTTP высупают протоколы FTP и SMTP (тоже прикладные). Однако, в отличие от других протоколов, HTTP не может сохранять свое состояние, отсюда и невозможность сохранить промежуточное состояние между парами «запрос-ответ». 

Использующие протокол HTTP компоненты способны самостоятельно осуществлять сохранение информации о последних запросах и ответах. Этой информацей являются cookie, в случае с клиентом, и «сессии», в случае с сервером. Посылающий запросы браузер в состоянии отслеживать задержки ответов. На сервере хранятся IP-адреса и заголовки запросов от последних клиентов. Впрочем, сам протокол не имеет информации о предыдущих запросах и ответах, этого в нем не предусмотрено.

Название

Hypertext Transfer Protocol

Семейство

TCP/IP

Год создания

1992

Порт/ID:

80/TCP

Спецификация

RFC 1945, RFC 2616

Клиенты

Веб-браузеры

Серверы

Apache, IIS и др.

Достоинства HTTP

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

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

Недостатки HTTP

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

К примеру, со стороны клиента применяются веб-пауки (такие программы, составляющие список ресурсов сервера). Сервер решает данную проблему благодаря «карте сайта» (site map). Карта полезна не только клиентам, но и самим роботам-паукам, поскольку она позволяет сократить минимальное число переходов с главной страницы веб-сайта. Эти же цели реализуют и специальные файлы формата sitemap, предназначенные непосредственно для роботов.

Данная проблема нашла полное решение только в расширяющем HTTP протоколе WebDAV. В нем добавили метод PROPFIND, который позволяет получить доступ не только к дереву каталогов, но и к списку параметров каждого ресурса.

HTTP создавался с целью решения обычных бытовых задач: предполагалось, что протокол будет обладать весьма коротким времем обработки запроса. Однако, в промышленных целях, где применялись распределенные вычисления с высокими нагрузками на сервер, протокол был непригоден.  В 1998 году был предложен альтернативный протокол HTTP-NG (HTTP Next Generation), который полностью заменял собой устаревший протокол. Новый имел акцент именно в этом моменте. Актуальность данного протокола была поддержана серьезными специалистами по распределенным вычислениям, однако, несмотря на это, протокол и по сей день находится в стадии разработки.

ПО

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

  • Серверы;
  • Клиенты;
  • Прокси по выполнению транспортных функций.

Чтобы разделять конечные сервера от прокси в официальной документации применяется такой термин, как «исходный сервер». Один и тот же программный продукт может одновременно быть как клиентом, так и сервером, либо же посредником, в зависимости от поставленных задач. Спецификации протокола HTTP содержат в себе описание подробного поведения, в каждой из этих ролей.

Клиенты

Изначально, HTTP создавали с целью организации доступа к гипертекстовым документам Глобальной сети. Отсюда, основными реализациями клиентов являются браузеры, они выступают в роли так называемых "агентов" пользователя. Чтобы просмотреть содержимое веб-сайтов, сохраненное на ПК, не имея интернет-соединения, были созданы специальные офлайн-браузеры. А в случае нестабильного интернет-соединения, для скачивания из Интернета файлов большого объема используются специальные менеджеры закачек, которые позволяют докачивать выбранные файлы даже после потери (и последующего восстановления) соединения с веб-сервером. 

Интересные факты:

  • Виртуальные атласы (Google Планета Земля и NASA World Wind) также применяют протокол HTTP.
  • Довольно-таки часто HTTP применяется в программах для скачивания обновлений.

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

Исходные серверы

Основными выступают:

  • Apache, 
  • Internet Information Services (IIS), 
  • lighttpd, 
  • nginx.

Прокси-серверы

Основными выступают:

  • Squid, 
  • UserGate, 
  • Multiproxy, 
  • Naviscope, 
  • Nginx.

История HTTP

Протокол HTTP был предложен в марте 1991 года. Его разработчиком является Тим Бернерс-Ли. В то время, он работал в компании CERN. Первоначально, протокол задумывался создателем в виде механизма для доступа к документам в Интернете, а также для облегчения навигации, которого предполагалось достигнуть благодаря применению гипертекста. 

Самая ранняя версия протокола HTTP/0.9 впервые была опубликована в январе 1992 года, несмотря на то, что реализация протокола датируется 1990 годом. Данная спецификация протокола демонстрировала упорядочение правил взаимодействия между клиентами и серверами. Кроме того, в ней было реализовано четкое разделение функций между ними. Были задокументированы основные синтаксические и семантические положения.

В мае 1996 года для осуществления практической реализации протокола HTTP был выпущен специальный документ RFC 1945. Это событие стало толчком для создание основы под реализацию большинства компонентов новой версии протокола - HTTP/1.0.

Следующая версия протокола - HTTP/1.1 - была принята в июне 1999 года. Главным нововведением в ней послужило «постоянное соединение». Согласно спецификации, TCP-соединение могло оставаться открытым после отправки ответа на запрос. Это позволяло посылать сразу несколько запросов в течение одного соединения. Клиент стал обязанным посылать информацию об имени хоста, что привело к упрощению организации виртуального хостинга.

Структура HTTP

HTTP-сообщение состоит из трех частей. Эти части передаются в строгом порядке:

  1. Стартовая строка. Она определяет тип сообщения;
  2. Заголовки. Характеризуют тело сообщения, параметры передачи и другую информацию;
  3. Тело сообщения. Это сами данные сообщения. Они обязательно должны быть разделены пустой строкой от заголовков.

Заголовков и тела сообщения может не быть, но вот стартовая строка - обязательный элемент, поскольку она указывает на тип запроса/ответа. Исключением является только HTTP/0.9, где сообщение содержит только стартовую строку, а ответ - лишь тело сообщения.

Характерные особенности HTTP

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

В случае с HTTP,  протокол устанавливает отдельную TCP-сессию на каждый запрос. Более поздние версии могут производить несколько запросов в ходе одной TCP-сессии, однако браузеры, как правило, запрашивают исключительно одну страницу, а также включенные в нее объекты, и уже потом моментально разрывают TCP-сессию. Чтобы организовать авторизованный доступ, в HTTP применяются cookies. Такой метод авторизации позволяет сохранить сессию даже после перезагрузки клиента/сервера.

Перед передачей данных протокол HTTP осуществляет передачу заголовка «Content-Type: тип/подтип», который позволяет клиенту однозначно определить, каким именно образом производить обработку полученных данных. Это крайне важно при работе с CGI-скриптами (расширение имени файла указывает на необходимость запуска данного файла на сервере, а также последующей отправки результатов клиенту, которые записываются в отдельном файле). 

Также, в рамках HTTP имеется возможность прислать на сервер клиенту определенные параметры, которые передаются потом CGI-скрипту. Для этого в HTML ввели формы.

По сути, HTTP провел коммерциализацию Интернета: появились компании, основным полем деятельности которых стало предоставление доступа в Интернет (провайдеры) и создание сайтов.

#