HTTP

Материал из свободной русской энциклопедии «Традиция»
Перейти к: навигация, поиск
Hypertext Transfer Protocol
HTTP
Уровень:
Прикладной
Семейство:
TCP/IP
Создан:
1990
Порт:
80 (TCP)
Назначение:
Доступ к гипертексту, ныне стал универсальным
Спецификация:
RFC 1945, RFC 2616
Реализация:
Реализации:
Internet Explorer, Mozilla Firefox, Opera
Клиенты:
Веб-браузеры, например Internet Explorer, Mozilla Firefox, Opera и др.
Серверы:
Apache, IIS

HTTP (от англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — сетевой протокол прикладного уровня для передачи файлов. В стеке TCP/IP для HTTP зарезервированы[1] порты 80 и 8080 транспортных протоколов TCP и UDP (на практике используется только первый). Основным назначением протокола HTTP является передача веб-страниц (текстовых файлов с разметкой HTML), хотя с помощью него с успехом передаются и другие файлы, как связанные с веб-страницами (изображения и приложения), так и не связанные с ними (в этом HTTP конкурирует с более сложным FTP). HTTP предполагает, что клиентская программа — веб-браузер — способна отображать гипертекстовые веб-страницы и файлы других типов в удобной для пользователя форме. Для правильного отображения HTTP позволяет клиенту узнать язык и кодировку веб-страницы и/или запросить версию страницы в нужных языке/кодировке, используя обозначения из стандарта MIME.

История развития[править]

HTTP/0.9[править]

HTTP был предложен в марте 1990 года Тимом Бернерсом-Ли, работавшим тогда в CERN, как механизм для доступа к документам в Интернете и облегчения навигации посредством использования гипертекста. Самая ранняя версия протокола HTTP/0.9 была впервые опубликована в январе 1992 г. (хотя реализация датируется 1990 годом). Спецификация протокола привела к упорядочению правил взаимодействия между клиентами и серверами HTTP, а также чёткому разделению функций между этими двумя компонентами. Были задокументированы основные синтаксические и семантические положения.

HTTP/1.0[править]

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

HTTP/1.1[править]

Последняя версия протокола. Последняя версия стандарта была принята в июне 1999 года[2]. Новым в этой версии был режим «постоянного соединения»: TCP-соединение может оставаться открытым после отправки ответа на запрос, что позволяет посылать несколько запросов за одно соединение. Клиент теперь обязан посылать информацию об имени хоста, к которому он обращается, что сделало возможным более простую организацию виртуального хостинга.

Структура протокола[править]

HTTP — протокол прикладного уровня, аналогичными ему явлются FTP и SMTP. Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI. В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ». Компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами. Браузер, посылающий запросы, может отслеживать задержки ответов. Сервер может хранить IP-адреса и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования. Каждый запрос/ответ состоит из трёх частей:

  1. стартовая строка;
  2. заголовки;
  3. тело сообщения, содержащее данные запроса, запрашиваемый ресурс или описание проблемы, если запрос не был выполнен.

Стартовые строки различаются для запроса и ответа. Строка запроса выглядит так: ‹Метод› ‹URI› HTTP/‹Версия› где ‹Метод› может быть:

OPTIONS
Возвращает методы HTTP, которые поддерживаются сервером. Этот метод может служить для определения возможностей веб-сервера.
GET
Запрашивает содержимое указанного ресурса. Запрашиваемый ресурс может принимать параметры (например, поисковая система может принимать в качестве параметра искомую строку). Они передаются в строке URI (например: http://www.example.net/resource?param1=value1&param2=value2). Согласно стандарту HTTP, запросы типа GET считаются идемпотентными[3] — многократное повторение одного и того же запроса GET должно приводить к одинаковым результатам (при условии, что сам ресурс не изменился за время между запросами). Это позволяет кэшировать ответы на запросы GET.
HEAD
Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Это полезно для извлечения мета-информации, заданной в заголовках ответа, без пересылки всего содержимого.
POST
Передаёт пользовательские данные (например, из HTML-формы) заданному ресурсу. Например, в блогах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом POST и он помещает их на страницу. При этом передаваемые данные (в примере с блогами — текст комментария) включаются в тело запроса. В отличие от метода GET, метод POST не считается идемпотентным[3], то есть многократное повторение одних и тех же запросов POST может возвращать разные результаты (например, после каждой отправки комментария будет появляться одна копия этого комментария).
PUT
Загружает указанный ресурс на сервер.
DELETE
Удаляет указанный ресурс.
TRACE
Возвращает полученный запрос так, что клиент может увидеть, что промежуточные сервера добавляют или изменяют в запросе.
CONNECT
Для использования вместе с прокси-серверами, которые могут динамически переключаться в туннельный режим SSL.

В основном используются методы GET и POST. Первая строка ответа выглядит так: HTTP/‹Версия› ‹Код статуса› ‹Описание статуса› Наиболее типичные статусы:

  • 200 OK — запрос выполнен успешно;
  • 403 Forbidden — доступ к запрошенному ресурсу запрещён;
  • 404 Not Found — запрошенный ресурс не найден.

Заголовки HTTP — это строки, каждая из которых состоит из имени параметра, за которым следует двоеточие и его значение. Они несут информацию для браузера или для серверных программ (таких, как CGI-приложения). Между заголовками и телом обязательно должна быть пустая строка.

Примеры HTTP[править]

Запрос: GET /wiki/HTTP HTTP/1.1 Host: ru.wikipedia.org User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Connection: close Ответ: HTTP/1.0 200 OK Server: Apache Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 (далее следует текст запрошенной страницы)

См. также[править]

Ссылки[править]

Примечания[править]

  1. {Port numbers
  2. Впервые спецификация HTTP/1.1 была опубликована в январе 1997 RFC 2068; в современной версии RFC 2616 исправлены опечатки, местами улучшены терминология и оформление. Разъяснено также допустимое поведение клиента (браузера), сервера и прокси-серверов некоторых сомнительных ситуациях. Т.е. версия 1.1 появилась всё-таки в 1997 году.
  3. а б "HTTP/1.1: Method Definitions". W3C. Retrieved 25 марта.  Unknown parameter |accessyear= ignored (help); Unknown parameter |lang= ignored (help); Check date values in: |accessdate= (help)

cy:HTTPeo:Hiperteksto-Transiga Protokolohu:HTTPlt:HTTP

lv:HTTPnn:Hypertext Transfer Protocol