HTTP: различия между версиями

Материал из свободной русской энциклопедии «Традиция»
Перейти к навигации Перейти к поиску
(викификация)
 
(оформление)
(не показана 1 промежуточная версия 1 участника)
Строка 11: Строка 11:
 
|Серверы = [[Apache]], [[IIS]]
 
|Серверы = [[Apache]], [[IIS]]
 
}}
 
}}
'''HTTP''' (от {{lang-en|HyperText Transfer Protocol}} «протокол передачи гипертекста») [[сетевой протокол]] прикладного уровня для передачи [[файл]]ов. В [[стек протоколов TCP/IP|стеке TCP/IP]] для HTTP зарезервированы<ref name="iana-port-numbers">{{{Inet-note-ref|type=ann|id=port-numbers|text=Port numbers}}</ref> [[порт (TCP/UDP)|порты]] 80 и 8080 транспортных протоколов [[TCP]] и [[UDP]] (на практике используется только первый).
+
'''HTTP''' (от {{lang-en|HyperText Transfer Protocol}} — «протокол передачи гипертекста») — [[сетевой протокол]] прикладного уровня для передачи [[файл]]ов. В [[стек протоколов TCP/IP|стеке TCP/IP]] для HTTP зарезервированы<ref name="iana-port-numbers">{{{Inet-note-ref|type=ann|id=port-numbers|text=Port numbers}}</ref> [[порт (TCP/UDP)|порты]] 80 и 8080 транспортных протоколов [[TCP]] и [[UDP]] (на практике используется только первый).
 
Основным назначением протокола HTTP является передача [[веб-страница|веб-страниц]] (текстовых файлов с разметкой [[HTML]]), хотя с помощью него с успехом передаются и другие файлы, как связанные с веб-страницами (изображения и приложения), так и не связанные с ними (в этом HTTP конкурирует с более сложным [[FTP]]).
 
Основным назначением протокола HTTP является передача [[веб-страница|веб-страниц]] (текстовых файлов с разметкой [[HTML]]), хотя с помощью него с успехом передаются и другие файлы, как связанные с веб-страницами (изображения и приложения), так и не связанные с ними (в этом HTTP конкурирует с более сложным [[FTP]]).
HTTP предполагает, что клиентская программа — [[браузер|веб-браузер]] способна отображать гипертекстовые веб-страницы и файлы других типов в удобной для пользователя форме.
+
HTTP предполагает, что клиентская программа — [[браузер|веб-браузер]] — способна отображать гипертекстовые веб-страницы и файлы других типов в удобной для пользователя форме.
 
Для правильного отображения HTTP позволяет клиенту узнать язык и [[набор символов|кодировку]] веб-страницы и/или запросить версию страницы в нужных языке/кодировке, используя обозначения из стандарта [[MIME]].
 
Для правильного отображения HTTP позволяет клиенту узнать язык и [[набор символов|кодировку]] веб-страницы и/или запросить версию страницы в нужных языке/кодировке, используя обозначения из стандарта [[MIME]].
 +
 
== История развития ==
 
== История развития ==
 
=== HTTP/0.9 ===
 
=== HTTP/0.9 ===
HTTP был предложен в марте [[1990]] года [[Бернерс-Ли, Тим|Тимом Бернерсом-Ли]], работавшим тогда в [[CERN]], как механизм для доступа к документам в [[Интернет]]е и облегчения навигации посредством использования [[гипертекст]]а. Самая ранняя версия протокола HTTP/0.9 была впервые опубликована в январе [[1992]] г. (хотя реализация датируется [[1990]] годом). Спецификация протокола привела к упорядочению правил взаимодействия между [[клиент]]ами и [[сервер]]ами HTTP, а также чёткому разделению функций между этими двумя компонентами. Были задокументированы основные [[синтаксис|синтаксические]] и [[семантика|семантические]] положения.
+
HTTP был предложен в марте [[1990]] года [[Бернерс-Ли, Тим|Тимом Бернерсом-Ли]], работавшим тогда в [[CERN]], как механизм для доступа к документам в [[Интернет]]е и облегчения навигации посредством использования [[гипертекст]]а. Самая ранняя версия протокола HTTP/0.9 была впервые опубликована в январе [[1992]] г. (хотя реализация датируется [[1990]] годом). Спецификация протокола привела к упорядочению правил взаимодействия между [[клиент]]ами и [[сервер]]ами HTTP, а также чёткому разделению функций между этими двумя компонентами. Были задокументированы основные [[синтаксис|синтаксические]] и [[семантика|семантические]] положения.
 +
 
 
=== HTTP/1.0 ===
 
=== HTTP/1.0 ===
 
В мае [[1996]] года для практической реализации HTTP был выпущен информационный документ RFC 1945, что послужило основой для реализации большинства компонентов HTTP/1.0.
 
В мае [[1996]] года для практической реализации HTTP был выпущен информационный документ RFC 1945, что послужило основой для реализации большинства компонентов HTTP/1.0.
 +
 
=== HTTP/1.1 ===
 
=== HTTP/1.1 ===
 
Последняя версия протокола. Последняя версия стандарта была принята в июне [[1999]] года<ref>
 
Последняя версия протокола. Последняя версия стандарта была принята в июне [[1999]] года<ref>
Впервые спецификация HTTP/1.1 была опубликована в январе [[1997]] {{Inet-note-ref|type=rfc|id=2068|text=RFC 2068}}; в современной версии {{Inet-note-ref|type=rfc|id=2616|text=RFC 2616}} исправлены опечатки, местами улучшены терминология и оформление. Разъяснено также допустимое поведение клиента (браузера), сервера и [[прокси-сервер]]ов некоторых сомнительных ситуациях. Т.е. версия 1.1 появилась всё-таки в 1997 году.</ref>.
+
Впервые спецификация HTTP/1.1 была опубликована в январе [[1997]] {{Inet-note-ref|type=rfc|id=2068|text=RFC 2068}}; в современной версии {{Inet-note-ref|type=rfc|id=2616|text=RFC 2616}} исправлены опечатки, местами улучшены терминология и оформление. Разъяснено также допустимое поведение клиента (браузера), сервера и [[прокси-сервер]]ов некоторых сомнительных ситуациях. То есть версия 1.1 появилась всё-таки в 1997 году.</ref>.
 
Новым в этой версии был режим «постоянного соединения»: [[TCP]]-соединение может оставаться открытым после отправки ответа на запрос, что позволяет посылать несколько запросов за одно соединение. Клиент теперь обязан посылать информацию об имени хоста, к которому он обращается, что сделало возможным более простую организацию виртуального хостинга.
 
Новым в этой версии был режим «постоянного соединения»: [[TCP]]-соединение может оставаться открытым после отправки ответа на запрос, что позволяет посылать несколько запросов за одно соединение. Клиент теперь обязан посылать информацию об имени хоста, к которому он обращается, что сделало возможным более простую организацию виртуального хостинга.
 +
 
== Структура протокола ==
 
== Структура протокола ==
HTTP — протокол [[модель OSI|прикладного уровня]], аналогичными ему явлются [[File Transfer Protocol|FTP]] и [[SMTP]]. Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные [[URI]]. В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ». Компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами. [[Браузер]], посылающий запросы, может отслеживать задержки ответов. Сервер может хранить [[IP-адрес]]а и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования.
+
HTTP — протокол [[модель OSI|прикладного уровня]], аналогичными ему явлются [[File Transfer Protocol|FTP]] и [[SMTP]]. Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные [[URI]]. В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ». Компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами. [[Браузер]], посылающий запросы, может отслеживать задержки ответов. Сервер может хранить [[IP-адрес]]а и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования.
 
Каждый запрос/ответ состоит из трёх частей:
 
Каждый запрос/ответ состоит из трёх частей:
 
# стартовая строка;
 
# стартовая строка;
Строка 42: Строка 46:
 
|publisher=[[W3C]]
 
|publisher=[[W3C]]
 
|accessdate=25 марта
 
|accessdate=25 марта
|accessyear=2007}}</ref> многократное повторение одного и того же запроса GET должно приводить к одинаковым результатам (при условии, что сам ресурс не изменился за время между запросами). Это позволяет [[кэширование|кэшировать]] ответы на запросы GET.
+
|accessyear=2007}}</ref> — многократное повторение одного и того же запроса GET должно приводить к одинаковым результатам (при условии, что сам ресурс не изменился за время между запросами). Это позволяет [[кэширование|кэшировать]] ответы на запросы GET.
 
; HEAD
 
; HEAD
 
: Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Это полезно для извлечения мета-информации, заданной в заголовках ответа, без пересылки всего содержимого.
 
: Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Это полезно для извлечения мета-информации, заданной в заголовках ответа, без пересылки всего содержимого.
 
; POST
 
; POST
: Передаёт пользовательские данные (например, из HTML-формы) заданному ресурсу. Например, в [[блог]]ах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом POST и он помещает их на страницу. При этом передаваемые данные (в примере с блогами — текст комментария) включаются в тело запроса. В отличие от метода GET, метод POST не считается идемпотентным<ref name="http-spec-methods" />, то есть многократное повторение одних и тех же запросов POST может возвращать разные результаты (например, после каждой отправки комментария будет появляться одна копия этого комментария).
+
: Передаёт пользовательские данные (например, из HTML-формы) заданному ресурсу. Например, в [[блог]]ах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом POST и он помещает их на страницу. При этом передаваемые данные (в примере с блогами — текст комментария) включаются в тело запроса. В отличие от метода GET, метод POST не считается идемпотентным<ref name="http-spec-methods" />, то есть многократное повторение одних и тех же запросов POST может возвращать разные результаты (например, после каждой отправки комментария будет появляться одна копия этого комментария).
 
; PUT
 
; PUT
 
: Загружает указанный ресурс на сервер.
 
: Загружает указанный ресурс на сервер.
Строка 59: Строка 63:
 
<code>HTTP/‹Версия› ‹Код статуса› ‹Описание статуса›</code>
 
<code>HTTP/‹Версия› ‹Код статуса› ‹Описание статуса›</code>
 
Наиболее типичные статусы:
 
Наиболее типичные статусы:
* ''200 OK'' запрос выполнен успешно;
+
* ''200 OK'' — запрос выполнен успешно;
* ''403 Forbidden'' доступ к запрошенному ресурсу запрещён;
+
* ''403 Forbidden'' — доступ к запрошенному ресурсу запрещён;
* ''404 Not Found'' запрошенный ресурс не найден.
+
* ''404 Not Found'' — запрошенный ресурс не найден.
Заголовки HTTP — это строки, каждая из которых состоит из имени параметра, за которым следует двоеточие и его значение. Они несут информацию для [[браузер]]а или для серверных программ (таких, как [[CGI]]-приложения). Между заголовками и телом обязательно должна быть пустая строка.
+
Заголовки HTTP — это строки, каждая из которых состоит из имени параметра, за которым следует двоеточие и его значение. Они несут информацию для [[браузер]]а или для серверных программ (таких, как [[CGI]]-приложения). Между заголовками и телом обязательно должна быть пустая строка.
 +
 
 
=== Примеры HTTP ===
 
=== Примеры HTTP ===
 
'''Запрос''':
 
'''Запрос''':
Строка 76: Строка 81:
 
Content-Length: 1234
 
Content-Length: 1234
 
''(далее следует текст запрошенной страницы)''
 
''(далее следует текст запрошенной страницы)''
 +
 
== См. также ==
 
== См. также ==
 
* [[Всемирная паутина]]
 
* [[Всемирная паутина]]
Строка 84: Строка 90:
 
* [[Код состояния HTTP]]
 
* [[Код состояния HTTP]]
 
* [[User Agent]]
 
* [[User Agent]]
 +
 
== Ссылки ==
 
== Ссылки ==
 
* Спецификация HTTP/1.0 (Май 1996) чистым текстом: RFC 1945 (включает версию 0.9)
 
* Спецификация HTTP/1.0 (Май 1996) чистым текстом: RFC 1945 (включает версию 0.9)
Строка 92: Строка 99:
 
* [http://www.eventhelix.com/RealtimeMantra/Networking/http_sequence_diagram.pdf Пример последовательности HTTP-обмена] между браузером и сервером (PDF)
 
* [http://www.eventhelix.com/RealtimeMantra/Networking/http_sequence_diagram.pdf Пример последовательности HTTP-обмена] между браузером и сервером (PDF)
 
* [http://apachedev.ru/2006/03/12/the-apache-modeling-project-glava-2-chast-1/ Функционирование HTTP сервера]{{ref-ru}}
 
* [http://apachedev.ru/2006/03/12/the-apache-modeling-project-glava-2-chast-1/ Функционирование HTTP сервера]{{ref-ru}}
 +
 
== Примечания ==
 
== Примечания ==
 
<references />
 
<references />
 
{{IPstack}}
 
{{IPstack}}
 
[[Категория:Протокол HTTP|*]]
 
[[Категория:Протокол HTTP|*]]
[[ar:HTTP]]
 
[[bg:HTTP]]
 
[[bn:হাইপার টেক্সট ট্রান্সফার প্রোটোকল]]
 
[[bs:Hypertext Transfer Protocol]]
 
[[ca:Protocol de transferència d'hipertext]]
 
[[cs:Hyper Text Transfer Protocol]]
 
[[cy:HTTP]]
 
[[da:HTTP]]
 
[[de:Hypertext Transfer Protocol]]
 
[[el:Πρωτόκολλο Μεταφοράς Υπερκειμένου]]
 
[[en:Hypertext Transfer Protocol]]
 
[[eo:Hiperteksto-Transiga Protokolo]]
 
[[es:Hypertext Transfer Protocol]]
 
[[et:Hypertext Transfer Protocol]]
 
[[eu:HTTP]]
 
[[fi:HTTP]]
 
[[fr:Hypertext Transfer Protocol]]
 
[[ga:Prótacal Aistrithe Hipirtéacs]]
 
[[gl:HTTP]]
 
[[he:HyperText Transfer Protocol]]
 
[[hr:HTTP]]
 
[[hu:HTTP]]
 
[[id:HTTP]]
 
[[is:HTTP]]
 
[[it:HTTP]]
 
[[ja:Hypertext Transfer Protocol]]
 
[[ko:HTTP]]
 
[[lb:Hypertext Transfer Protocol]]
 
[[lt:HTTP]]
 
[[lv:HTTP]]
 
[[ml:എച്ച്‌.‌ടി.ടി.പി]]
 
[[nl:Hypertext Transfer Protocol]]
 
[[nn:Hypertext Transfer Protocol]]
 
[[no:HTTP]]
 
[[pl:Hypertext Transfer Protocol]]
 
[[pt:HTTP]]
 
[[ro:HTTP]]
 
[[sh:HTTP]]
 
[[simple:Hypertext Transfer Protocol]]
 
[[sk:Hypertext Transfer Protocol]]
 
[[sl:HTTP]]
 
[[sq:HTTP]]
 
[[sr:HTTP]]
 
[[sv:HTTP]]
 
[[th:HyperText Transfer Protocol]]
 
[[tl:HTTP]]
 
[[tr:HTTP]]
 
[[uk:HTTP]]
 
[[vi:Hypertext Transfer Protocol]]
 
[[zh:超文本传输协议]]{{wikipedia-article}}
 

Версия от 11:30, 24 декабря 2007

Hypertext Transfer Protocol
HTTP
Уровень:
Прикладной
Семейство:
TCP/IP
Создан:
1990
Порт:
80/TCP
Назначение:
Доступ к гипертексту, ныне стал универсальным
Спецификация:
RFC 1945, RFC 2616
Реализация:
Реализации:
Mozilla Firefox
Клиенты:
Веб-браузеры, например 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)