HTTP
Материал из Википедии — свободной энциклопедии
- Прикладной уровень
- HTTP, SMTP, FTP, TFTP, DHCP, SSH, IRC, SNMP, DNS,
IMAP, NNTP, SIP, Telnet, BitTorrent, XDR, rlogin… - Транспортный уровень
- TCP, UDP, SCTP, DCCP, RTP, RUDP…
- Сетевой уровень
- IPv4, IPv6, ARP, RARP, ICMP, IGMP
- Канальный уровень
- Ethernet, 802.11 WiFi, Token ring, FDDI, PPP,
SLIP, ATM, DTM, Frame Relay, SMDS… - Физический уровень
- RS-232, EIA-422, RS-449, EIA-485…
HTTP (от англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — сетевой протокол прикладного уровня для передачи файлов. В стеке TCP/IP для HTTP зарезервированы порты 80 транспортных протоколов 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 года. Новым в этой версии был режим «постоянного соединения»: TCP-соединение может оставаться открытым после отправки ответа на запрос, что позволяет посылать несколько запросов за одно соединение. Клиент теперь обязан посылать информацию о имени хоста, к которому он обращается, что сделало возможным более простую организацию вирутального хостинга.
[править] Структура протокола
HTTP — протокол прикладного уровня, подобно FTP и SMTP. Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI. В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ». Компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами. Браузер, посылающий запросы, может отслеживать задержки ответов. Сервер может хранить IP-адреса и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования.
Каждый запрос/ответ состоит из трёх частей:
- стартовая строка;
- заголовки;
- тело сообщения, содержащее данные запроса, запрашиваемый ресурс или описание проблемы, если запрос не был выполнен.
Стартовые строки различаются для запроса и ответа. Строка запроса выглядит так:
‹Метод› ‹URI› HTTP/‹Версия›
где ‹Метод›
может быть:
- OPTIONS
- Возвращает методы HTTP, которые поддерживаются сервером. Этот метод может служить для определения возможностей веб-сервера.
- GET
- Запрашивает содержимое указанного ресурса.
- HEAD
- Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Это полезно для извлечения мета-информации, заданной в в заголовках ответа без пересылки всего содержимого.
- POST
- Передаёт пользовательские данные (например из формы HTML) заданному ресурсу. Данные включаются в тело запроса.
- PUT
- Загружает указанный ресурс на сервер.
- DELETE
- Удаляет указанный ресурс
- TRACE
- Возвращает полученный запрос так, что клиент может увидеть, что промежуточные сервера добавляют к запросу или изменяют его
- CONNECT
- Для использования вместе с прокси-серверами, которые могут динамически переключаться в туннельный режим SSL.
В основном используются только методы GET и POST. Различаются они тем, что в методе GET данные запроса внедряются в URL ресурса (после вопросительного знака, например: http://server/document.html?param=value
), а в методе 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 сервера(русск.)