HTTP
HTTP | |
---|---|
Название | Hypertext Transfer Protocol |
Уровень (по �одели OSI) | Прикладной |
Се�ейство | TCP/IP |
Создан в | 1990 |
РџРѕСЂС‚/ID | 80/TCP |
Спецификация | RFC 124, RFC 1945, RFC 2616, RFC 2617, RFC 6266, RFC 7230, RFC 7240, RFC 8446, RFC 9110. |
Основные реализации (клиенты) | Веб-браузеры, напри�ер, Internet Explorer, Mozilla Firefox, Opera, Google Chrome, Яндекс.�раузер, Microsoft Edge и др. |
Основные реализации (серверы) | Apache, IIS, nginx, Google Web Server и др. |
 РњРµРґРёР°С„айлы РЅР° Викискладе |
HTTP (англ. HyperText Transfer Protocol вЂ” «протокол передачи гипертекста») вЂ” сетевой протокол прикладного СѓСЂРѕРІРЅСЏ, который изначально предназначался для получения СЃ серверов гипертекстовых РґРѕРєСѓР�ентов РІ форР�ате HTML, Р° СЃ течениеР� РІСЂРµР�ени стал универсальныР� средствоР� взаиР�одействия Р�ежду узлаР�Рё как Р’СЃРµР�РёСЂРЅРѕР№ паутины, так Рё изолированных веб-инфраструктур. Определение РїРѕ РѕСЃРЅРѕРІРЅС‹Р� РґРѕРєСѓР�ентацияР�: HTTP — протокол СѓСЂРѕРІРЅСЏ приложений для распределС�нных, объединС�нных, гиперР�едийных инфорР�ационных систеР�, используеР�ый РІ глобальной инфорР�ационной инициативе Р’СЃРµР�РёСЂРЅРѕР№ паутины СЃ 1990 РіРѕРґР°[1].
Основные свойства
Основой HTTP является технология «клиент-сервер», то есть предполагается существование:
- Потребителей (клиентов), которые инициируют соединение и посылают запрос;
- Поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходи�ые действия и возвращают обратно сообщение с результато�.
HTTP РІ настоящее РІСЂРµР�СЏ РїРѕРІСЃРµР�естно используется РІРѕ Р’СЃРµР�РёСЂРЅРѕР№ паутине для получения инфорР�ации СЃ веб-сайтов. Р’ 2006 РіРѕРґСѓ РІ Северной РђР�ерике доля HTTP-трафика превысила долю P2P-сетей Рё составила 46 %, РёР· которых почти половина вЂ” это передача потокового видео Рё Р·РІСѓРєР°[2].
HTTP используется также в качестве «транспорта» для других протоколов прикладного уровня, таких как SOAP, XML-RPC, WebDAV.
РћСЃРЅРѕРІРЅС‹Р� объектоР� Р�анипуляции РІ HTTP является ресурс, РЅР° который указывает URI (Uniform Resource Identifier) РІ запросе клиента. Обычно такиР�Рё ресурсаР�Рё являются хранящиеся РЅР° сервере файлы, РЅРѕ РёР�Рё Р�РѕРіСѓС‚ быть логические объекты или что-то абстрактное. Особенностью протокола HTTP является РІРѕР·Р�ожность указать РІ запросе Рё ответе СЃРїРѕСЃРѕР± представления РѕРґРЅРѕРіРѕ Рё того же ресурса РїРѕ различныР� параР�етраР�: форР�ату, РєРѕРґРёСЂРѕРІРєРµ, языку Рё С‚. Рґ. (РІ частности, для этого используется HTTP-заголовок). Р�Р�енно благодаря РІРѕР·Р�ожности указания СЃРїРѕСЃРѕР±Р° кодирования сообщения клиент Рё сервер Р�РѕРіСѓС‚ РѕР±Р�ениваться двоичныР�Рё данныР�Рё, хотя данный протокол является текстовыР�.
HTTP вЂ” протокол прикладного СѓСЂРѕРІРЅСЏ; аналогичныРС�Р С‘ РµРС�РЎС“ являются FTP Р С‘ SMTP. РћР±РС�ен сообщенияРС�Р С‘ РёРґСвЂ�С‚ Р С—Р С• обыкновенной СЃС…РµРС�Р Вµ «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI. Р’ отличие РѕС‚ Р С�РЅРѕРіРёС… РґСЂСѓРіРёС… протоколов, HTTP Р Р…Р Вµ сохраняет своего состояния. Р Вто означает отсутствие сохранения РїСЂРѕРС�ежуточного состояния Р С�ежду параРС�Р С‘ «запрос-ответ». РљРѕРС�поненты, использующие HTTP, Р С�РѕРіСѓС‚ СЃР°РС�остоятельно осуществлять сохранение инфорРС�ации Р С• состоянии, связанной РЎРѓ последниРС�Р С‘ запросаРС�Р С‘ Р С‘ ответаРС�Р С‘ (наприРС�ер, «куки» Р Р…Р В° стороне клиента, «сессии» Р Р…Р В° стороне сервера). Р вЂ�раузер, посылающий запросы, Р С�ожет отслеживать задержки ответов. Сервер Р С�ожет хранить IP-адреса Р С‘ заголовки запросов последних клиентов. Однако СЃР°РС� протокол Р Р…Р Вµ осведоРС�Р»СвЂ�Р Р… Р С• предыдущих запросах Р С‘ ответах, Р Р† Р Р…РЎвЂ�Р С� Р Р…Р Вµ предусРС�отрена внутренняя поддержка состояния, Р С” РЅРµРС�РЎС“ Р Р…Р Вµ предъявляются такие требования.
Р�ольшинство протоколов предусР�атривает установление TCP-сессии, РІ С…РѕРґРµ которой РѕРґРёРЅ раз РїСЂРѕРёСЃС…РѕРґРёС‚ авторизация, Рё дальнейшие действия выполняются РІ контексте этой авторизации. HTTP же устанавливает отдельную TCP-сессию РЅР° каждый запрос; РІ более РїРѕР·РґРЅРёС… версиях HTTP было разрешено делать несколько запросов РІ С…РѕРґРµ РѕРґРЅРѕР№ TCP-сессии, РЅРѕ браузеры обычно запрашивают только страницу Рё включС�нные РІ РЅРµС� объекты (картинки, каскадные стили Рё С‚. Рї.), Р° затеР� сразу разрывают TCP-сессию. Для поддержки авторизованного (неанониР�РЅРѕРіРѕ) доступа РІ HTTP используются cookies; РїСЂРёС‡С�Р� такой СЃРїРѕСЃРѕР± авторизации позволяет сохранить сессию даже после перезагрузки клиента Рё сервера.
РџСЂРё доступе Р С” данныРС� Р С—Р С• FTP или Р С—Р С• файловыРС� протоколаРС� тип файла (точнее, тип содержащихся Р Р† Р Р…РЎвЂ�Р С� данных) определяется Р С—Р С• расширению РёРС�ени файла, что Р Р…Р Вµ всегда СѓРґРѕР±РЅРѕ. HTTP перед теРС�, как передать СЃР°РС�Р С‘ данные, передаСвЂ�С‚ заголовок Р’В«Content-Type: тип/подтип», позволяющий клиенту однозначно определить, какиРС� образоРС� обрабатывать присланные данные. Р Вто особенно важно РїСЂРё работе РЎРѓ CGI-скриптаРС�Р С‘, РєРѕРіРґР° расширение РёРС�ени файла указывает Р Р…Р Вµ Р Р…Р В° тип присылаеРС�ых клиенту данных, Р В° Р Р…Р В° необходиРС�ость запуска данного файла Р Р…Р В° сервере Р С‘ отправки клиенту результатов работы РїСЂРѕРіСЂР°РС�Р С�С‹, записанной Р Р† этоРС� файле (РїСЂРё этоРС� РѕРґРёРЅ Р С‘ тот же файл Р Р† зависиРС�ости РѕС‚ аргуРС�ентов запроса Р С‘ СЃРІРѕРёС… собственных соображений Р С�ожет порождать ответы разных типов вЂ” Р Р† простейшеРС� случае картинки Р Р† разных форРС�атах).
Кро�е того, HTTP позволяет клиенту прислать на сервер пара�етры, которые будут переданы запускае�о�у CGI-скрипту. Для этого же в HTML были введены фор�ы.
Перечисленные особенности HTTP позволили создавать поисковые Р С�ашины (первой РёР· которых стала AltaVista, созданная фирРС�РѕР№ DEC), форуРС�С‹ Р С‘ Internet-Р С�агазины. Р Вто РєРѕРС�Р С�ерциализировало �нтернет, появились РєРѕРС�пании, РѕСЃРЅРѕРІРЅС‹РС� полеРС� деятельности которых стало предоставление доступа Р Р† �нтернет (провайдеры) Р С‘ создание сайтов.
Програ��ное обеспечение
Вс� програ��ное обеспечение для работы с протоколо� HTTP разделяется на три большие категории:
- Серверы как основные поставщики услуг хранения и обработки инфор�ации (обработка запросов);
- Клиенты вЂ” конечные потребители услуг сервера (отправка запроса);
- Прокси (посредники) для выполнения транспортных служб.
Для отличия конечных серверов РѕС‚ РїСЂРѕРєСЃРё РІ официальной РґРѕРєСѓР�ентации используется терР�РёРЅ «исходный сервер» (англ. origin server). РћРґРёРЅ Рё тот же РїСЂРѕРіСЂР°Р�Р�ный РїСЂРѕРґСѓРєС‚ Р�ожет РѕРґРЅРѕРІСЂРµР�енно выполнять функции клиента, сервера или посредника РІ зависиР�ости РѕС‚ поставленных задач. Р’ спецификациях протокола HTTP РїРѕРґСЂРѕР±РЅРѕ описывается поведение для каждой РёР· этих ролей.
Клиенты
Первоначально протокол HTTP разрабатывался для доступа к гипертекстовы� доку�ента� Все�ирной паутины. Поэто�у основны�и реализация�и клиентов являются браузеры (агенты пользователя). Для прос�отра сохран�нного содержи�ого сайтов на ко�пьютере без соединения с �нтернето� были приду�аны офлайн-браузеры. При нестабильно� соединении для загрузки больших файлов используются �енеджеры закачек; они позволяют в любое вре�я докачать указанные файлы после потери соединения с веб-серверо�. Некоторые виртуальные атласы (такие как Google Планета Зе�ля и NASA World Wind) тоже используют HTTP.
Нередко протокол HTTP используется програ��а�и для скачивания обновлений.
Целый ко�плекс програ��-роботов используется в поисковых систе�ах �нтернета. Среди них веб-пауки (краулеры), которые производят проход по гиперссылка�, составляют базу данных ресурсов серверов и сохраняют их содержи�ое для дальнейшего анализа.
�сходные серверы
Основные реализации: Apache, Internet Information Services (IIS), nginx, LiteSpeed Web Server (LSWS), Google Web Server, lighttpd.
Прокси-серверы
Основные реализации: Squid, UserGate, Multiproxy, Naviscope, nginx.
Структура HTTP-сообщения
Каждое HTTP-сообщение состоит из тр�х частей, которые передаются в указанно� порядке:
- Стартовая строка (англ. Starting line) вЂ” определяет тип сообщения;
- Заголовки (англ. Headers) вЂ” характеризуют тело сообщения, параР�етры передачи Рё прочие сведения;
- Тело сообщения (англ. Message Body) вЂ” непосредственно данные сообщения. Обязательно должно отделяться РѕС‚ заголовков пустой строкой.
Тело сообщения Р�ожет отсутствовать, РЅРѕ стартовая строка Рё заголовок являются обязательныР�Рё элеР�ентаР�Рё. Р�сключениеР� является версия 0.9 протокола, Сѓ которой сообщение запроса содержит только стартовую строку, Р° сообщения ответа вЂ” только тело сообщения.
Для версии протокола 1.1 сообщение запроса обязательно должно содержать заголовок Host.
Стартовая строка
Стартовые строки различаются для запроса и ответа. Строка запроса выглядит так:
GET URI
 вЂ” для версии протокола 0.9;Метод URI HTTP/Версия
 вЂ” для остальных версий.
Здесь:
- Метод (англ. Method) вЂ” тип запроса, РѕРґРЅРѕ слово заглавныР�Рё Р±СѓРєРІР°Р�Рё. Р’ версии HTTP 0.9 использовался только Р�етод
GET
, список �етодов для версии 1.1 представлен ниже. - URI определяет путь к запрашивае�о�у доку�енту.
- Версия (англ. Version) вЂ” пара разделС�нных точкой цифр. НаприР�ер:
1.0
.
Чтобы запросить страницу данной статьи, клиент должен передать строку (задан всего один заголовок):
Host: ru.wikipedia.org
Стартовая строка ответа сервера и�еет следующий фор�ат: HTTP/Версия КодСостояния Пояснение
, Р С–Р Т‘Р Вµ:
- Версия вЂ” пара разделС�нных точкой цифр, как РІ запросе;
- РљРѕРґ состояния (англ. Status Code) вЂ” три цифры. РџРѕ РєРѕРґСѓ состояния определяется дальнейшее содержиР�РѕРµ сообщения Рё поведение клиента;
- Пояснение (англ. Reason Phrase) вЂ” текстовое короткое пояснение Рє РєРѕРґСѓ ответа для пользователя. Никак РЅРµ влияет РЅР° сообщение Рё является необязательныР�.
Напри�ер, стартовая строка ответа сервера на предыдущий запрос �ожет выглядеть так:
HTTP/1.0 200 OK
Методы
Метод HTTP (англ. HTTP Method) вЂ” последовательность РёР· любых СЃРёР�волов, РєСЂРѕР�Рµ управляющих Рё разделителей, указывающая РЅР° РѕСЃРЅРѕРІРЅСѓСЋ операцию над ресурсоР�. Обычно Р�етод представляет СЃРѕР±РѕР№ короткое английское слово, записанное заглавныР�Рё Р±СѓРєРІР°Р�Рё. Обратите РІРЅРёР�ание, что название Р�етода чувствительно Рє регистру.
Сервер �ожет использовать любые �етоды, не существует обязательных �етодов для сервера или клиента. Если сервер не распознал указанный клиенто� �етод, то он должен вернуть статус 501
(Not Implemented). Если серверу �етод известен, но он непри�ени� к конкретно�у ресурсу, то возвращается сообщение с кодо� 405
(Method Not Allowed). В обоих случаях серверу следует включить в сообщение ответа заголовок Allow
со списко� поддерживае�ых �етодов.
Кро�е �етодов GET
Р С‘ HEAD
, часто при�еняется �етод POST
.
OPTIONS
�спользуется для определения воз�ожностей веб-сервера или пара�етров соединения для конкретного ресурса. В ответ серверу следует включить заголовок Allow
со списко� поддерживае�ых �етодов. Также в заголовке ответа �ожет включаться инфор�ация о поддерживае�ых расширениях.
Предполагается, что запрос клиента �ожет содержать тело сообщения для указания интересующих его сведений. Фор�ат тела и порядок работы с ни� в настоящий �о�ент не определ�н; сервер пока должен его игнорировать. Аналогичная ситуация и с тело� в ответе сервера.
Для того, чтобы узнать РІРѕР·Р�ожности всего сервера, клиент должен указать РІ URI Р·РІС�здочку вЂ” В«*
». Запросы «OPTIONS * HTTP/1.1
» �огут также при�еняться для проверки работоспособности сервера (аналогично «пингованию») и тестирования на пред�ет поддержки серверо� протокола HTTP версии 1.1.
Результат выполнения этого �етода не кэшируется.
GET
�спользуется для запроса содержи�ого указанного ресурса. С по�ощью �етода GET
�ожно также начать какой-либо процесс. В это� случае в тело ответного сообщения следует включить инфор�ацию о ходе выполнения процесса.
Клиент �ожет передавать пара�етры выполнения запроса в URI целевого ресурса после си�вола «?
Р’В»:GET /path/resource?param1=value1¶m2=value2 HTTP/1.1
Согласно стандарту HTTP, запросы типа GET
считаются иде�потентны�и[3]
Кро�е обычного �етода GET
, различают ещ�
- Условный
GET
 вЂ” содержит заголовкиIf-Modified-Since
,If-Match
,If-Range
и подобные; - Частичный
GET
 вЂ” содержит РІ запросеRange
.
Порядок выполнения подобных запросов определ�н стандарта�и отдельно.
HEAD
Аналогичен �етоду GET
, за исключение� того, что в ответе сервера отсутствует тело. Запрос HEAD
обычно при�еняется для извлечения �етаданных, проверки наличия ресурса (валидация URL) и чтобы узнать, не из�енился ли он с �о�ента последнего обращения.
Заголовки ответа Р�РѕРіСѓС‚ кэшироваться. РџСЂРё несовпадении Р�етаданных ресурса СЃ соответствующей инфорР�ацией РІ кэше вЂ” РєРѕРїРёСЏ ресурса РїРѕР�ечается как устаревшая.
POST
РџСЂРёР�еняется для передачи пользовательских данных заданноР�Сѓ ресурсу. НаприР�ер, РІ блогах посетители обычно Р�РѕРіСѓС‚ вводить СЃРІРѕРё РєРѕР�Р�ентарии Рє записяР� РІ HTML-форР�Сѓ, после чего РѕРЅРё передаются серверу Р�етодоР� POST Рё РѕРЅ РїРѕР�ещает РёС… РЅР° страницу. РџСЂРё этоР� передаваеР�ые данные (РІ РїСЂРёР�ере СЃ блогаР�Рё вЂ” текст РєРѕР�Р�ентария) включаются РІ тело запроса. Аналогично СЃ РїРѕР�ощью Р�етода POST
обычно загружаются файлы на сервер.
В отличие от �етода GET
, �етод POST
не считается иде�потентны�[3], то есть �ногократное повторение одних и тех же запросов POST
�ожет возвращать разные результаты (напри�ер, после каждой отправки ко��ентария будет появляться очередная копия этого ко��ентария).
При результате выполнения 200
(Ok) в тело ответа следует включить сообщение об итоге выполнения запроса. Если был создан ресурс, то серверу следует вернуть ответ 201
(Created) с указание� URI нового ресурса в заголовке Location
.
Сообщение ответа сервера на выполнение �етода POST
не кэшируется.
PUT
При�еняется для загрузки содержи�ого запроса на указанный в запросе URI. Если по заданно�у URI не существует ресурса, то сервер созда�т его и возвращает статус 201
(Created). Если же ресурс был из�ен�н, то сервер возвращает 200
(Ok) или 204
(No Content). Сервер не должен игнорировать некорректные заголовки Content-*
, передавае�ые клиенто� в�есте с сообщение�. Если какой-то из этих заголовков не �ожет быть распознан или недопусти� при текущих условиях, то необходи�о вернуть код ошибки 501
(Not Implemented).
Фунда�ентальное различие �етодов POST
Р С‘ PUT
заключается в пони�ании предназначений URI ресурсов. Метод POST
предполагает, что по указанно�у URI будет производиться обработка передавае�ого клиенто� содержи�ого. �спользуя PUT
, клиент предполагает, что загружае�ое содержи�ое соответствует находяще�уся по данно�у URI ресурсу.
Сообщения ответов сервера на �етод PUT
не кэшируются.
PATCH
Аналогично PUT, но при�еняется только к фраг�енту ресурса.
DELETE
Удаляет указанный ресурс.
TRACE
Возвращает полученный запрос так, что клиент �ожет увидеть, какую инфор�ацию про�ежуточные серверы добавляют или из�еняют в запросе.
CONNECT
Преобразует соединение запроса в прозрачный TCP/IP-туннель, обычно чтобы содействовать установлению защищ�нного SSL-соединения через нешифрованный прокси.
Коды состояния
Код состояния является частью первой строки ответа сервера. Он представляет собой целое число из тр�х цифр[4]. Первая цифра указывает на класс состояния. За кодо� ответа обычно следует отдел�нная пробело� поясняющая фраза на английско� языке, которая разъясняет человеку причину и�енно такого ответа. При�еры:
201 Webpage Created 403 Access allowed only for registered users 507 Insufficient Storage
Клиент узна�т по коду ответа о результатах его запроса и определяет, какие действия е�у предприни�ать дальше. Набор кодов состояния является стандарто�, и они описаны в соответствующих доку�ентах RFC. Введение новых кодов должно производиться только после согласования с IETF. Клиент �ожет не знать все коды состояния, но он обязан отреагировать в соответствии с классо� кода.
В настоящее вре�я выделено пять классов кодов состояния
Код | Класс | Назначение |
---|---|---|
1xx
|
�нфор�ационный
(англ. informational) |
�нфор�ирование о процессе передачи.
Р’ HTTP/1.0 вЂ” сообщения СЃ такиР�Рё РєРѕРґР°Р�Рё должны игнорироваться. Р’ HTTP/1.1 вЂ” клиент должен быть готов принять этот класс сообщений как обычный ответ, РЅРѕ ничего отправлять серверу РЅРµ нужно. РЎР°Р�Рё сообщения РѕС‚ сервера содержат только стартовую строку ответа Рё, если требуется, несколько специфичных для ответа полей заголовка. РџСЂРѕРєСЃРё-серверы подобные сообщения должны отправлять дальше РѕС‚ сервера Рє клиенту. |
2xx
|
Успех
(англ. Success) |
�нфор�ирование о случаях успешного принятия и обработки запроса клиента. В зависи�ости от статуса, сервер �ожет ещ� передать заголовки и тело сообщения. |
3xx
|
Перенаправление
(англ. Redirection) |
Сообщает клиенту, что для успешного выполнения операции необходи�о сделать другой запрос (как правило по друго�у URI). �з данного класса пять кодов 301 , 302 , 303 , 305 и 307 относятся непосредственно к перенаправления� (редирект). Адрес, по которо�у клиенту следует произвести запрос, сервер указывает в заголовке Location . При это� допускается использование фраг�ентов в целево� URI.
|
4xx
|
Клиентская ошибка
(англ. Client Error) |
Указание ошибок со стороны клиента. При использовании всех �етодов, кро�е HEAD , сервер должен вернуть в теле сообщения гипертекстовое пояснение для пользователя.
|
5xx
|
Ошибка сервера
(англ. Server Error) |
�нфор�ирование о случаях неудачного выполнения операции по вине сервера. Для всех ситуаций, кро�е использования �етода HEAD , сервер должен включать в тело сообщения объяснение, которое клиент отобразит пользователю.
|
Заголовки
Заголовки HTTP (англ. HTTP Headers) вЂ” это строки РІ HTTP-сообщении, содержащие разделС�РЅРЅСѓСЋ двоеточиеР� пару параР�етр-значение. ФорР�ат заголовков соответствует общеР�Сѓ форР�ату заголовков текстовых сетевых сообщений ARPA (СЃР�. RFC 822). Заголовки должны отделяться РѕС‚ тела сообщения хотя Р±С‹ РѕРґРЅРѕР№ пустой строкой.
При�еры заголовков:
Server: Apache/2.2.11 (Win32) PHP/5.3.0 Last-Modified: Sat, 16 Jan 2010 21:16:42 GMT Content-Type: text/plain; charset=windows-1251 Content-Language: ru
Р’ РїСЂРёР�ере выше каждая строка представляет СЃРѕР±РѕР№ РѕРґРёРЅ заголовок. РџСЂРё этоР� то, что находится РґРѕ двоеточия, называется РёР�енеР� (англ. name), Р° что после него вЂ” значениеР� (англ. value).
Все заголовки разделяются на четыре основных группы:
- General Headers («Основные заголовки») вЂ” Р�РѕРіСѓС‚ включаться РІ любое сообщение клиента Рё сервера;
- Request Headers («Заголовки запроса») вЂ” используются только РІ запросах клиента;
- Response Headers («Заголовки ответа») вЂ” только для ответов РѕС‚ сервера;
- Entity Headers («Заголовки сущности») вЂ” сопровождают каждую сущность сообщения.
��енно в тако� порядке реко�ендуется посылать заголовки получателю.
Все необходи�ые для функционирования HTTP заголовки описаны в основных RFC. Если не хватает существующих, то �ожно вводить свои. Традиционно к и�ена� таких дополнительных заголовков добавляют префикс «X-
» для избежания конфликта и��н с воз�ожно существующи�и. Напри�ер, как в заголовках X-Powered-By
или X-Cache
. Некоторые разработчики используют свои индивидуальные префиксы. При�ера�и таких заголовков �огут служить Ms-Echo-Request
Р С‘ Ms-Echo-Reply
, введ�нные корпорацией Microsoft для расширения WebDAV.
Тело сообщения
Тело HTTP-сообщения (message-body
), если оно присутствует, используется для передачи тела объекта, связанного с запросо� или ответо�. Тело сообщения отличается от тела объекта (entity-body
) только в то� случае, когда при�еняется кодирование передачи, что указывается поле� заголовка Transfer-Encoding
.
message-body = entity-body | <entity-body закодировано согласно Transfer-Encoding>
Поле Transfer-Encoding
должно использоваться для указания любого кодирования передачи, при�ен�нного приложение� в целях гарантирования безопасной и правильной передачи сообщения. Поле Transfer-Encoding
 вЂ” это свойство сообщения, Р° РЅРµ объекта, Рё, такиР� образоР�, Р�ожет быть добавлено или удалено любыР� приложениеР� РІ цепочке запросов/ответов.
Правила, устанавливающие допусти�ость тела сообщения в сообщении, отличны для запросов и ответов.
Присутствие тела сообщения в запросе от�ечается добавление� к заголовка� запроса поля заголовка Content-Length
или Transfer-Encoding
. Тело сообщения Р�ожет Р±С‹С‚СЊ добавлено РІ запрос, только РєРѕРіРґР° Р�етод запроса допускает тело объекта.
Включается или РЅРµ включается тело сообщения РІ сообщение ответа вЂ” зависит как РѕС‚ Р�етода запроса, так Рё РѕС‚ РєРѕРґР° состояния ответа. Р’СЃРµ ответы РЅР° запрос СЃ Р�етодоР� HEAD
не должны включать тело сообщения, даже если присутствуют поля заголовка объекта (entity-header
), заставляющие поверить в присутствие объекта. Никакие ответы с кода�и состояния 1xx
(�нфор�ационные), 204
(Нет содержи�ого, No Content), и 304
(Не �одифицирован, Not Modified) не должны содержать тела сообщения. Все другие ответы содержат тело сообщения, даже если оно и�еет нулевую длину.
При�еры диалогов HTTP
Запрос клиента:
GET /wiki/страница HTTP/1.1 Host: ru.wikipedia.org User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Accept: text/html Connection: close (пустая строка)
Ответ сервера:
HTTP/1.1 200 OK Date: Wed, 11 Feb 2009 11:20:59 GMT Server: Apache X-Powered-By: PHP/5.2.4-2ubuntu5wm1 Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close (пустая строка) (запрошенная страница в HTML)
Аналогично выглядит ответ 203
. Что существенно — непосредственно запрашивае�ые данные отделены от HTTP-заголовков с по�ощью CR, LF, CR, LF.
Предположи�, что у вы�ышленной ко�пании «Example Corp.» есть основной сайт по адресу «http://example.com» и до�ен-псевдони� «example.org». Клиент посылает запрос страницы «О ко�пании» на вторичный до�ен (часть заголовков опущена):
GET /about.html HTTP/1.1 Host: example.org User-Agent: MyLonelyBrowser/5.0
Так как до�ен «example.org» не является основны� и ко�пания не собирается в будуще� его использовать в других целях, их сервер верн�т код для постоянного перенаправления, указав в заголовке Location
целевой URL:
HTTP/1.x 301 Moved Permanently Location: http://example.com/about.html#contacts Date: Thu, 19 Feb 2009 11:08:01 GMT Server: Apache/2.2.4 Content-Type: text/html; charset=windows-1251 Content-Length: 110 (пустая строка) <html><body><a href="http://example.com/about.html#contacts">Click here</a></body></html>
В заголовке Location
�ожно указывать фраг�енты как в данно� при�ере. �раузер не указал фраг�ент в запросе, так как его интересует весь доку�ент. Но он авто�атически прокрутит страницу до фраг�ента «contacts», как только загрузит е�. В тело ответа также был по�ещ�н короткий HTML-доку�ент со ссылкой, с по�ощью которой посетитель попад�т на целевую страницу, если браузер не перейд�т на не� авто�атически. Заголовок Content-Type
содержит характеристики и�енно этого HTML-пояснения, а не доку�ента, который находится по целево�у URI.
Допусти�, эта же ко�пания «Example Corp.» и�еет несколько региональных представительств по все�у �иру. � для каждого представительства у них есть сайт с соответствующи� ccTLD. Запрос главной страницы основного сайта «example.com» �ожет выглядеть так:
GET / HTTP/1.1 Host: example.com User-Agent: MyLonelyBrowser/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Сервер принял во вни�ание заголовок Accept-Language
и сфор�ировал ответ со вре�енны� перенаправление� на российский сервер «example.ru», указав его адрес в заголовке Location
:
HTTP/1.x 302 Found Location: http://example.ru/ Cache-Control: private Date: Thu, 19 Feb 2009 11:08:01 GMT Server: Apache/2.2.6 Content-Type: text/html; charset=windows-1251 Content-Length: 82 (пустая строка) <html><body><a href="http://example.ru">Example Corp.</a></body></html>
Обратите вни�ание на заголовок Cache-Control
: значение «private» сообщает остальны� сервера� (в первую очередь прокси) что ответ �ожет кэшироваться только на стороне клиента. В противно� случае не исключено, что следующие посетители из других стран будут переходить вс� вре�я не в сво� представительство.
Для перенаправления также используются коды ответа 303
(See Other) Р С‘ 307
(Temporary Redirect).
Допусти�, вы�ышленная организация предлагает скачать с сайта видео прошедшей конференции по адресу: «http://example.org/conf-2009.avi» — объ��о� при�ерно 160 М�. Расс�отри�, как происходит докачивание этого файла в случае сбоя и как �енеджер закачек организовал бы �ногопоточную загрузку нескольких фраг�ентов.
В обоих случаях клиенты произведут свой первый запрос наподобие этого:
GET /conf-2009.avi HTTP/1.0 Host: example.org Accept: */* User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Referer: http://example.org/
Заголовок Referer
указывает, что файл был запрошен с главной страницы сайта. Менеджеры закачек обычно тоже его указывают, чтобы э�улировать переход со страницы сайта. �ез него сервер �ожет ответить 403
(Access Forbidden), если не допускаются запросы с других сайтов. В наше� случае сервер вернул успешный ответ:
HTTP/1.1 200 OK Date: Thu, 19 Feb 2009 12:27:04 GMT Server: Apache/2.2.3 Last-Modified: Wed, 18 Jun 2003 16:05:58 GMT ETag: "56d-9989200-1132c580" Content-Type: video/x-msvideo Content-Length: 160993792 Accept-Ranges: bytes Connection: close (пустая строка) (двоичное содержи�ое всего файла)
Заголовок Accept-Ranges
инфор�ирует клиента о то�, что он �ожет запрашивать у сервера фраг�енты, указывая их с�ещения от начала файла в байтах. Если этот заголовок отсутствует, то клиент �ожет предупредить пользователя, что докачать файл, скорее всего, не удастся.
�сходя из значения заголовка Content-Length
, �енеджер закачек поделит весь объ�� на равные фраг�енты и запросит их по отдельности, организовав несколько потоков. Если сервер не укажет раз�ер, то клиенту параллельное скачивание реализовать не удастся, но при это� он с�ожет докачивать файл, пока сервер не ответит 416
(Requested Range Not Satisfiable).
Допусти�, на 84-� �егабайте соединение с �нтернето� прервалось и процесс загрузки приостановился. Когда соединение с �нтернето� было восстановлено, �енеджер закачек авто�атически послал новый запрос на сервер, но с указание� выдать содержи�ое с 84-го �егабайта:
GET /conf-2009.avi HTTP/1.0 Host: example.org Accept: */* User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Range: bytes=88080384- Referer: http://example.org/
Сервер не обязан по�нить, какие и от кого запросы были до этого, и поэто�у клиент снова вставил заголовок Referer
, как будто это его са�ый первый запрос. Указанное значение заголовка Range
говорит серверу: «Выдай содержи�ое от 88080384-го байта до са�ого конца». В связи с эти� сервер верн�т ответ:
HTTP/1.1 206 Partial Content Date: Thu, 19 Feb 2009 12:27:08 GMT Server: Apache/2.2.3 Last-Modified: Wed, 18 Jun 2003 16:05:58 GMT ETag: "56d-9989200-1132c580" Accept-Ranges: bytes Content-Range: bytes 88080384-160993791/160993792 Content-Length: 72913408 Connection: close Content-Type: video/x-msvideo (пустая строка) (двоичное содержи�ое от 84-го �егабайта)
Заголовок Accept-Ranges
здесь уже не обязателен, так как клиент уже знает об этой воз�ожности сервера. О то�, что переда�тся фраг�ент, клиент узна�т по коду 206
(Partial Content). В заголовке Content-Range
содержится инфорР�ация Рѕ данноР� фрагР�енте: РЅРѕР�ера начального Рё конечного байта, Р° после слэша вЂ” СЃСѓР�Р�арный РѕР±СЉС�Р� всего файла РІ байтах. Обратите РІРЅРёР�ание РЅР° заголовок Content-Length
 вЂ” РІ РЅС�Р� указывается разР�ер тела сообщения, то есть передаваеР�РѕРіРѕ фрагР�ента. Если сервер вернС�С‚ несколько фрагР�ентов, то Content-Length
будет содержать их су��арный объ��.
Теперь верн��ся к �енеджеру закачек. Зная су��арный объ�� файла «conf-2009.avi», програ��а поделила его на 10 равных секций.
Начальную Р�енеджер загрузит РїСЂРё СЃР°Р�РѕР� первоР� запросе, прервав соединение как только РґРѕР№РґС�С‚ РґРѕ начала второго. Остальные РѕРЅ запросит отдельно. НаприР�ер, 4-СЏ секция будет запрошена СЃРѕ следующиР�Рё заголовкаР�Рё (часть заголовков опущена вЂ” СЃР�. полный РїСЂРёР�ер выше):
GET /conf-2009.avi HTTP/1.0 Range: bytes=64397516-80496894
Ответ сервера РІ этоР� случае будет следующиР� (часть заголовков опущена вЂ” СЃР�. полный РїСЂРёР�ер выше):
HTTP/1.1 206 Partial Content Accept-Ranges: bytes Content-Range: bytes 64397516-80496894/160993792 Content-Length: 16099379 (пустая строка) (двоичное содержи�ое 4-й части)
Если подобный запрос отправить серверу, который не поддерживает фраг�енты, то он верн�т стандартный ответ 200
(OK) как было показано в са�о� начале, но без заголовка Accept-Ranges
.
- С�. также частичные GET, байтовые диапазоны, ответ 206, ответ 416.
Основные �еханиз�ы протокола
Частичные GET
HTTP позволяет запросить не сразу вс� содержи�ое ресурса, а только указанный фраг�ент. Такие запросы называются частичные GET
; воз�ожность их выполнения необязательна (но желательна) для серверов. Частичные GET
в основно� используются для докачки файлов и быстрого параллельного скачивания в нескольких потоках. Некоторые програ��ы скачивают заголовок архива, выводят пользователю внутреннюю структуру, а пото� уже запрашивают фраг�енты с указанны�и эле�ента�и архива.
Для получения фраг�ента клиент посылает серверу запрос с заголовко� Range
, указывая в н�� необходи�ые байтовые диапазоны. Если сервер не пони�ает частичные запросы (игнорирует заголовок Range
), то он верн�т вс� содержи�ое со статусо� 200
, как и при обычно� GET
. В случае успешного выполнения сервер возвращает в�есто кода 200
ответ со статусо� 206
(Partial Content), включая в ответ заголовок Content-Range
. Са�и фраг�енты �огут быть переданы дву�я способа�и:
- В ответе по�ещается заголовок
Content-Range
с указание� байтовых диапазонов. В соответствии с ни�и фраг�енты последовательно по�ещаются в основное тело. При это�Content-Length
должен соответствовать су��арно�у объ��у всего тела; - Сервер указывает �едиатип
multipart/byteranges
для основного содержи�ого и переда�т фраг�енты, указывая соответствующийContent-Range
для каждого эле�ента (с�. также «Множественное содержи�ое» ).
Условные GET
Метод GET
из�еняется на «условный GET
», если сообщение запроса включает в себя поле заголовка If-Modified-Since
. В ответ на «условный GET
» тело запрашивае�ого ресурса переда�тся, только если он из�енялся после даты, указанной в заголовке If-Modified-Since
. Алгорит� определения этого включает в себя следующие случаи:
- Если статус ответа на запрос будет отличаться от «200 OK» или дата, указанная в поле заголовка «If-Modified-Since», некорректна, ответ будет идентичен ответу на обычный запрос GET.
- Если после указанной даты ресурс из�енялся, ответ будет также идентичен ответу на обычный запрос GET.
- Если ресурс не из�енялся после указанной даты, сервер вернет статус «304 Not Modified».
�спользование �етода «условный GET» направлено на разгрузку сети, так как он позволяет не передавать по сети избыточную инфор�ацию.
Согласование содержи�ого
Согласование содержиР�РѕРіРѕ (англ. Content Negotiation) вЂ” Р�еханизР� автоР�атического определения необходиР�РѕРіРѕ ресурса РїСЂРё наличии нескольких разнотипных версий РґРѕРєСѓР�ента. СубъектаР�Рё согласования Р�РѕРіСѓС‚ быть РЅРµ только ресурсы сервера, РЅРѕ Рё возвращаеР�ые страницы СЃ сообщенияР�Рё РѕР± ошибках (403, 404 Рё С‚. Рї.).
Различают два основных типа согласований:
- УправляеР�РѕРµ сервероР� (англ. server-driven).
- УправляеР�РѕРµ клиентоР� (англ. agent-driven).
Одновре�енно �огут быть использованы оба типа или каждый из них по отдельности.
Р’ РѕСЃРЅРѕРІРЅРѕР№ спецификации РїРѕ протоколу (RFC 2616) также выделяется так называеР�РѕРµ прозрачное согласование (англ. transparent negotiation) как предпочтительный вариант РєРѕР�бинирования РѕР±РѕРёС… типов. Последний Р�еханизР� РЅРµ следует путать СЃ независиР�РѕР№ технологией Transparent Content Negotiation (TCN, «Прозрачное согласование содержиР�РѕРіРѕВ», СЃР�. RFC 2295), которая РЅРµ является частью протокола HTTP, РЅРѕ Р�ожет использоваться СЃ РЅРёР�. РЈ РѕР±РѕРёС… существенное различие РІ принципе работы Рё СЃР°Р�РѕР� значении слова «прозрачное» (transparent). Р’ спецификации РїРѕ HTTP РїРѕРґ прозрачностью подразуР�евается, что процесс РЅРµ Р·Р°Р�етен для клиента Рё сервера, Р° РІ технологии TCN прозрачность означает доступность полного СЃРїРёСЃРєР° вариантов ресурса для всех участников процесса доставки данных.
Управляе�ое серверо�
При наличии нескольких версий ресурса сервер �ожет анализировать заголовки запроса клиента, чтобы выдать, по его �нению, наиболее подходящую. В основно� анализируются заголовки Accept
, Accept-Charset
, Accept-Encoding
, Accept-Languages
Р С‘ User-Agent
. Серверу желательно включать в ответ заголовок Vary
с указание� пара�етров, по которы� различается содержи�ое по запрашивае�о�у URI.
Географическое положение клиента Р С�ожно определить Р С—Р С• удалСвЂ�РЅРЅРѕРС�РЎС“ IP-адресу. Р Вто РІРѕР·РС�ожно Р В·Р В° СЃС‡СвЂ�С‚ того что IP-адреса, как Р С‘ РґРѕРС�енные РёРС�ена, регистрируются Р Р…Р В° конкретного человека или организацию. РџСЂРё регистрации указывается регион, Р Р† котороРС� будет использоваться желаеРС�РѕРµ адресное пространство. Р Вти данные общедоступны, Р С‘ Р Р† �нтернете Р С�ожно найти соответствующие СЃРІРѕР±РѕРґРЅРѕ распространяеРС�ые базы данных Р С‘ готовые РїСЂРѕРіСЂР°РС�Р С�ные Р С�одули для работы РЎРѓ РЅРёРС�Р С‘ (следует ориентироваться Р Р…Р В° ключевые слова Р’В«Geo IPР’В»).
Следует по�нить что такой �етод способен определить �естоположение �акси�у� с точностью до города (отсюда определяется и страна). При это� инфор�ация актуальна только на �о�ент регистрации адресного пространства. Напри�ер, если �осковский провайдер зарегистрирует диапазон адресов с указание� Москвы и начн�т предоставлять доступ клиента� из ближайшего Под�осковья, то его абоненты �огут на некоторых сайтах наблюдать, что они из Москвы, а не из Красногорска или Дзержинского.
Управляе�ое серверо� согласование и�еет несколько недостатков:
- Сервер только предполагает, какой вариант наиболее предпочтителен для конечного пользователя, но не �ожет знать точно, что и�енно нужно в данный �о�ент (напри�ер, версия на русско� языке или английско�).
- Заголовков РіСЂСѓРїРїС‹ Accept передаС�тся Р�РЅРѕРіРѕ, Р° ресурсов СЃ несколькиР�Рё вариантаР�Рё вЂ” Р�ало. Р�Р·-Р·Р° этого оборудование испытывает избыточную нагрузку.
- Обще�у кэшу созда�тся ограничение воз�ожности выдавать один и тот же ответ на идентичные запросы от разных пользователей.
- Передача заголовков Accept также �ожет раскрывать некоторые сведения о его предпочтениях, таких как используе�ые языки, браузер, кодировка.
Управляе�ое клиенто�
В данно� случае тип содержи�ого определяется только на стороне клиента.
Для этого сервер возвращает в ответе с кодо� состояния 300
(Multiple Choices) или 406
(Not Acceptable) список вариантов, среди которых пользователь выбирает подходящий.
Управляе�ое клиенто� согласование хорошо, когда содержи�ое различается по са�ы� часты� пара�етра� (напри�ер, по языку и кодировке) и используется публичный кэш.
РћСЃРЅРѕРІРЅРѕР№ недостаток вЂ” лишняя нагрузка, так как приходится делать дополнительный запрос, чтобы получить нужное содержиР�РѕРµ.
Прозрачное согласование
Данное согласование полностью прозрачно для клиента Р С‘ сервера. Р’ данноРС� случае используется общий РєСЌС€, Р Р† котороРС� содержится СЃРїРёСЃРѕРє вариантов, как для управляеРС�РѕРіРѕ клиентоРС� согласования. Если РєСЌС€ РїРѕРЅРёРС�ает РІСЃРµ эти варианты, то РѕРЅ СЃР°РС� делает выбор, как РїСЂРё управляеРС�РѕРС� сервероРС� согласовании. Р Вто снижает нагрузки РЎРѓ РёСЃС…РѕРґРЅРѕРіРѕ сервера Р С‘ исключает дополнительный запрос РЎРѓР С• стороны клиента.
В основной спецификации по протоколу HTTP �еханиз� прозрачного согласования подробно не описан.
Множественное содержи�ое
Протокол HTTP поддерживает передачу нескольких сущностей в пределах одного сообщения. Прич�� сущности �огут передаваться не только в виде одноуровневой последовательности, но и в виде иерархии с вложение� эле�ентов друг в друга. Для обозначения �ножественного содержи�ого используются �едиатипы multipart/*
. Работа с таки�и типа�и осуществляется по общи� правила�, описанны� в RFC 2046 (если иное не определено конкретны� �едиатипо�). Если получателю не известно как работать с типо�, то он обрабатывает его так же, как multipart/mixed
.
Пара�етр boundary означает разделитель �ежду различны�и типа�и передавае�ых сообщений. Напри�ер, передавае�ый из фор�ы пара�етр DestAddress переда�т значение адреса e-mail, а следующий за ни� эле�ент AttachedFile1 отправляет двоичное содержи�ое изображения фор�ата .jpg
Со стороны сервера сообщения со �ножественны� содержи�ы� �огут посылаться в ответ на частичные GET
при запросе нескольких фраг�ентов ресурса. В это� случае используется �едиатип multipart/byteranges
.
Со стороны клиента при отправке HTML-фор�ы чаще всего пользуются �етодо� POST
. Типичный при�ер: страницы отправки электронных писе� со вложенны�и файла�и. При отправке такого пись�а браузер фор�ирует сообщение типа multipart/form-data
, интегрируя в него как отдельные части, введ�нные пользователе�, те�у пись�а, адрес получателя, са� текст и вложенные файлы:
POST /send-message.html HTTP/1.1 Host: mail.example.com Referer: http://mail.example.com/send-message.html User-Agent: BrowserForDummies/4.67b Content-Type: multipart/form-data; boundary="Asrf456BGe4h" Content-Length: (су��арный объ��, включая дочерние заголовки) Connection: keep-alive Keep-Alive: 300 (пустая строка) (отсутствующая преа�була) --Asrf456BGe4h Content-Disposition: form-data; name="DestAddress" (пустая строка) brutal-vasya@example.com—Asrf456BGe4h Content-Disposition: form-data; name="MessageTitle" (пустая строка) Я негодую—Asrf456BGe4h Content-Disposition: form-data; name="MessageText" (пустая строка) Привет, Василий! Твой ручной лев, которого ты оставил у �еня на прошлой неделе, разодрал весь �ой диван. Пожалуйста, забери его скорее! Во вложении две фотки с последствия�и. --Asrf456BGe4h Content-Disposition: form-data; name="AttachedFile1"; filename="horror-photo-1.jpg" Content-Type: image/jpeg (пустая строка) (двоичное содержи�ое первой фотографии) --Asrf456BGe4h Content-Disposition: form-data; name="AttachedFile2"; filename="horror-photo-2.jpg" Content-Type: image/jpeg (пустая строка) (двоичное содержи�ое второй фотографии) --Asrf456BGe4h-- (отсутствующий эпилог)
В при�ере в заголовках Content-Disposition
пара�етр name
соответствует атрибуту name
в HTML-тегах <INPUT>
Р С‘ <TEXTAREA>
. Пара�етр filename
равен исходно�у и�ени файла на ко�пьютере пользователя. �олее подробная инфор�ация о фор�ировании HTML-фор� и вложении файлов в RFC 1867.
�стория развития
- HTTP/0.9
- HTTP был предложен в �арте 1991 года Ти�о� �ернерсо�-Ли, работавши� тогда в CERN, как �еханиз� для доступа к доку�ента� в �нтернете и облегчения навигации посредство� использования гипертекста. Са�ая ранняя версия протокола HTTP/0.9 была впервые опубликована в январе 1992 года (хотя реализация датируется 1990 годо�). Спецификация протокола привела к упорядочению правил взаи�одействия �ежду клиента�и и сервера�и HTTP, а также ч�тко�у разделению функций �ежду эти�и дву�я ко�понента�и. �ыли задоку�ентированы основные синтаксические и се�антические положения.
- HTTP/1.0
- В �ае 1996 года для практической реализации HTTP был выпущен инфор�ационный доку�ент RFC 1945, что послужило основой для реализации большинства ко�понентов HTTP/1.0.
- HTTP/1.1
- Совре�енная версия протокола; принята в июне 1999 года[5]. Новы� в этой версии был режи� «постоянного соединения»: TCP-соединение �ожет оставаться открыты� после отправки ответа на запрос, что позволяет посылать несколько запросов за одно соединение. Клиент теперь обязан посылать инфор�ацию об и�ени хоста, к которо�у он обращается, что сделало воз�ожной более простую организацию виртуального хостинга.
- HTTP/2
- 11 февраля 2015 РіРѕРґР° опубликованы финальные версии черновика следующей версии протокола. Р’ отличие РѕС‚ предыдущих версий, протокол HTTP/2 является бинарныР�. Среди ключевых особенностей: Р�ультиплексирование запросов, расстановка приоритетов для запросов, сжатие заголовков, загрузка нескольких элеР�ентов параллельно посредствоР� РѕРґРЅРѕРіРѕ TCP-соединения, поддержка проактивных push-уведоР�лений СЃРѕ стороны сервера[6].
- HTTP/3
- HTTP/3 вЂ” предлагаеР�ый последователь HTTP/2[7][8], который уже используется РІ Веб РЅР° РѕСЃРЅРѕРІРµ UDP РІР�есто TCP РІ качестве транспортного протокола. Как Рё HTTP/2, РѕРЅ РЅРµ объявляет устаревшиР�Рё предыдущие основные версии протокола. Поддержка HTTP/3 была добавлена РІ Cloudflare Рё Google Chrome РІ сентябре 2019 РіРѕРґР°[9][10] Рё Р�ожет быть включена РІ стабильных версиях Chrome Рё Firefox[11].
С�. также
- Список кодов состояния HTTP
- Заголовки HTTP (список):
- Cookie
- Дайджест-аутентификация
- HTTP/2
- HTTPS
При�ечания
- � С�. раздел «Abstract» в са�о� начале RFC 1945 (1996 год) и RFC 9112 (2022-ой).
- � Объ�� HTTP-трафика впервые превысил P2P Архивная копия от 22 декабря 2007 на Wayback Machine // Ко�пьюлента, 22 июня 2007 (Официальный доку�ент от Ellacoya Networks Архивная копия от 22 июня 2007 на Wayback Machine).
- в†� 1 2 HTTP/1.1: Method Definitions (англ.). Архивировано РёР· оригинала 23 РёСЋРЅСЏ 2012 РіРѕРґР°.
- � С�. первое предложение раздела «6.1.1 Status Code and Reason Phrase» в RFC 2068. На стр. 40 есть также объявление в фор�ате расширенной �НФ-фор�ы (Augmented BNF ) «
extension-code = 3DIGIT
» для кодов расширений. - � Впервые спецификация HTTP/1.1 была опубликована в январе 1997 RFC 2068; в совре�енной версии RFC 2616 исправлены опечатки, �еста�и улучшены тер�инология и офор�ление. Также разъяснено допусти�ое поведение клиента (браузера), сервера и прокси-серверов в некоторых со�нительных ситуациях. То есть версия 1.1 появилась вс�-таки в 1997 году.
- � HTTP/2 Draft . Дата обращения: 25 февраля 2015. Архивировано 20 февраля 2015 года.
- в†� Bishop, Mike Hypertext Transfer Protocol Version 3 (HTTP/3) (англ.). tools.ietf.org (9 июля 2019). Дата обращения: 16 августа 2019. Архивировано 31 августа 2019 РіРѕРґР°.
- в†� Cimpanu, Catalin. "HTTP-over-QUIC to be renamed HTTP/3 | ZDNet". ZDNet (англ.). Архивировано РёР· оригинала 13 РЅРѕСЏР±СЂСЏ 2018. Дата обращения: 19 РЅРѕСЏР±СЂСЏ 2018.
{cite news}
: Указан более че� один пара�етр|accessdate=
and|access-date=
(справка) - � Cimpanu, Catalin Cloudflare, Google Chrome, and Firefox add HTTP/3 support . ZDNet (26 сентября 2019). Дата обращения: 27 сентября 2019. Архивировано 26 сентября 2019 года.
- в†� HTTP/3: the past, the present, and the future (англ.). The Cloudflare Blog (26 сентября 2019). Дата обращения: 30 октября 2019. Архивировано 26 сентября 2019 РіРѕРґР°.
- � Firefox Nightly supports HTTP 3 - General - Cloudflare Community (19 ноября 2019). Дата обращения: 23 января 2020. Архивировано 6 июня 2020 года.
Ссылки
- Медиафайлы по те�е HTTP на Викискладе
- RFC 1945 вЂ” HTTP/1.0 (Май 1996), включает версию 0.9
- RFC 2616 вЂ” HTTP/1.1 (Р�СЋРЅСЊ 1999); СЃР�. также РІ РІРёРґРµ PostScript Рё PDF;
- httpbis-http2-17 вЂ” HTTP/2 (11 февраля 2015) Окончательная спецификация
- «Разъяснение http/2В» Даниэль Штенберг (СЂСѓСЃ.)
- Найденные опечатки в спецификации HTTP/1.1
- [www.lib.ru/WEBMASTER/rfc2068/ Перевод спецификации HTTP/1.1]
- Первоначальный HTTP 0.9 Ти�а �ернерса-Ли (написан и издан в 1991 году)
- Ранняя версия исходного черновика версии 1.0 1992 года Ти�а �ернерса-Ли
- При�ер последовательности HTTP-об�ена Архивная копия от 5 августа 2012 на Wayback Machine �ежду браузеро� и серверо�
- Функционирование HTTP-сервера