HTTP: различия между версиями
(викификация) |
Dream (обсуждение | вклад) (оформление) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 11: | Строка 11: | ||
|Серверы = [[Apache]], [[IIS]] | |Серверы = [[Apache]], [[IIS]] | ||
}} | }} | ||
− | '''HTTP''' (от {{lang-en|HyperText Transfer Protocol}} | + | '''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]] | + | 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}} исправлены опечатки, местами улучшены терминология и оформление. Разъяснено также допустимое поведение клиента (браузера), сервера и [[прокси-сервер]]ов некоторых сомнительных ситуациях. | + | Впервые спецификация 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-адрес]]а и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования. | |
Каждый запрос/ответ состоит из трёх частей: | Каждый запрос/ответ состоит из трёх частей: | ||
# стартовая строка; | # стартовая строка; | ||
Строка 42: | Строка 46: | ||
|publisher=[[W3C]] | |publisher=[[W3C]] | ||
|accessdate=25 марта | |accessdate=25 марта | ||
− | |accessyear=2007}}</ref> | + | |accessyear=2007}}</ref> — многократное повторение одного и того же запроса GET должно приводить к одинаковым результатам (при условии, что сам ресурс не изменился за время между запросами). Это позволяет [[кэширование|кэшировать]] ответы на запросы GET. |
; HEAD | ; HEAD | ||
: Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Это полезно для извлечения мета-информации, заданной в заголовках ответа, без пересылки всего содержимого. | : Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Это полезно для извлечения мета-информации, заданной в заголовках ответа, без пересылки всего содержимого. | ||
; POST | ; POST | ||
− | : Передаёт пользовательские данные (например, из HTML-формы) заданному ресурсу. Например, в [[блог]]ах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом 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 === | === Примеры 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|*]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Версия от 11:30, 24 декабря 2007
Hypertext Transfer Protocol HTTP
|
- Уровень:
- Прикладной
- Семейство:
- TCP/IP
- Создан:
- 1990
- Спецификация:
- RFC 1945, RFC 2616
- Реализации:
- 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)