HTTP
Hypertext Transfer Protocol HTTP
|
- Уровень:
- Прикладной
- Семейство:
- TCP/IP
- Создан:
- 1990
- Назначение:
- Доступ к гипертексту, ныне стал универсальным
- Реализации:
- Mozilla Firefox
- Клиенты:
- Веб-браузеры, например Internet Explorer, Mozilla Firefox, Opera и др.
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-адреса и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования. Каждый запрос/ответ состоит из трёх частей:
- стартовая строка;
- заголовки;
- тело сообщения, содержащее данные запроса, запрашиваемый ресурс или описание проблемы, если запрос не был выполнен.
Стартовые строки различаются для запроса и ответа. Строка запроса выглядит так:
‹Метод› ‹URI› HTTP/‹Версия›
где ‹Метод›
может быть:
- OPTIONS
- Возвращает методы HTTP, которые поддерживаются сервером. Этот метод может служить для определения возможностей веб-сервера.
- GET
- Запрашивает содержимое указанного ресурса. Запрашиваемый ресурс может принимать параметры (например, поисковая система может принимать в качестве параметра искомую строку). Они передаются в строке URI (например:
http://www.example.net/resource?param1=value1¶m2=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 (далее следует текст запрошенной страницы)
См. также[править | править код]
Ссылки[править | править код]
- Спецификация HTTP/1.0 (Май 1996) чистым текстом: RFC 1945 (включает версию 0.9)
- Спецификация HTTP/1.1 (Июнь 1999) чистым текстом: RFC 2616; см. также в виде HTML, в формате PostScript, и в формате PDF;
- Найденные опечатки в спецификации HTTP/1.1
- Первоначальный HTTP 0.9 Тима Бернерса-Ли (написанный и изданный в 1991 году)
- Ранняя версия исходного черновика версии 1.0 1992 года Тима Бернерса-Ли
- Пример последовательности HTTP-обмена между браузером и сервером (PDF)
- Функционирование HTTP сервера(русск.)
Примечания[править | править код]
- ↑ {Port numbers
- ↑ Впервые спецификация HTTP/1.1 была опубликована в январе 1997 RFC 2068; в современной версии RFC 2616 исправлены опечатки, местами улучшены терминология и оформление. Разъяснено также допустимое поведение клиента (браузера), сервера и прокси-серверов некоторых сомнительных ситуациях. Т.е. версия 1.1 появилась всё-таки в 1997 году.
- ↑ а б "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:HTTP eo:Hiperteksto-Transiga Protokolo hu:HTTP lt:HTTP lv:HTTP nn:Hypertext Transfer Protocol