Поиск…


замечания

Протокол передачи гипертекста (HTTP) использует модель клиент-запрос / сервер-ответ. HTTP - это протокол без учета состояния, что означает, что сервер не требует сохранения информации или статуса каждого пользователя в течение нескольких запросов. Однако по соображениям производительности и для предотвращения проблем с задержкой соединения TCP могут использоваться такие методы, как постоянные, параллельные или конвейерные соединения.

Версии

Версия Заметки) Предполагаемая дата выпуска
HTTP / 0.9 «Как реализовано» 1991-01-01
HTTP / 1.0 Первая версия HTTP / 1.0, последняя версия, которая не попала в RFC 1992-01-01
HTTP / 1.0 r1 Первый официальный RFC для HTTP 1996-05-01
HTTP / 1.1 Усовершенствования в обработке подключений, поддержка виртуальных хостов на основе имен 1997-01-01
HTTP / 1.1 r1 Исправлено использование двуязычного ключевого слова, устранены возможные проблемы с кадрированием сообщений 1999-06-01
HTTP / 1.1 r2 Капитальный ремонт 2014-06-01
HTTP / 2 Первая спецификация для HTTP / 2 2015-05-01

HTTP-запросы и ответы

HTTP-клиенты и серверы отправляют HTTP-запросы и ответы соответственно

HTTP описывает, как HTTP-клиент, такой как веб-браузер, отправляет HTTP-запрос через сеть на HTTP-сервер, который затем отправляет HTTP-ответ клиенту.

HTTP-запрос обычно представляет собой запрос на онлайн-ресурс, такой как веб-страница или изображение, но может также содержать дополнительную информацию, такую ​​как данные, введенные в форме. Ответ HTTP обычно представляет собой представление онлайн-ресурса, например веб-страницы или изображения.

HTTP / 1.0

HTTP / 1.0 был описан в RFC 1945 .

HTTP / 1.0 не имеет некоторых функций, которые сегодня де-факто требуются в Интернете, например заголовка Host для виртуальных хостов.

Тем не менее, HTTP-клиенты и серверы по-прежнему заявляют, что они используют HTTP / 1.0, если они имеют неполную реализацию протокола HTTP / 1.1 (например, без кодированной передачи или конвейерной обработки), или совместимость считается более важной, чем производительность (например, при подключении к локальному прокси-серверу серверы).

GET / HTTP/1.0
User-Agent: example/1

HTTP/1.0 200 OK
Content-Type: text/plain

Hello

HTTP / 1.1

HTTP / 1.1 изначально был указан в 1999 году в RFC 2616 (протокол) и RFC 2617 (аутентификация), но эти документы устарели и не должны использоваться в качестве ссылки:

Не используйте RFC2616. Удалите его с жестких дисков, закладок и запишите (или ответственно переработайте) все распечатанные копии.

- Марк Ноттингем, председатель рабочей группы по HTTP

Современная спецификация HTTP / 1.1, которая соответствует тому, как HTTP реализуется сегодня, находится в новых RFC 723x:

HTTP / 1.1 добавил, среди прочих возможностей:

  • chunked transfer encoding, что позволяет серверам надежно отправлять ответы неизвестного размера,
  • постоянные соединения TCP / IP (которые были нестандартными расширениями в HTTP / 1.0),
  • запросы диапазона, используемые для возобновления загрузки,
  • кеш-контроль.

HTTP / 1.1 попытался ввести конвейерную обработку, что позволило HTTP-клиентам сократить время ожидания запроса-ответа, отправив сразу несколько запросов, не дожидаясь ответов. К сожалению, эта функция никогда не была правильно реализована в некоторых прокси-серверах, в результате чего конвейерные соединения удаляли или переупорядочивали ответы.

GET / HTTP/1.0
User-Agent: example/1
Host: example.com

HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 6
Connection: close

Hello

HTTP / 2

HTTP / 2 ( RFC 7540 ) изменил проводной формат HTTP с простого текстового запроса и заголовков ответов на двоичный формат данных, отправленный в фреймах. HTTP / 2 поддерживает сжатие заголовков ( HPACK ).

Это уменьшило накладные расходы на запросы и позволило одновременно получать несколько ответов по одному соединению TCP / IP.

Несмотря на значительные изменения в формате данных, HTTP / 2 по-прежнему использует HTTP-заголовки, а запросы и ответы могут быть точно переведены между HTTP / 1.1 и 2.

HTTP / 0.9

Первая версия HTTP, которая появилась, составляет 0,9, которую часто называют « HTTP as Implemented ». Общим описанием 0.9 является «подсекция полного протокола HTTP [т.е. 1.0]». Однако это не позволяет проиллюстрировать несоответствие возможностей между 0.9 и 1.0.

Ни в запросах, ни в ответах в 0,9 заголовках функций. Запросы состоят из одной линии GET завершенным CRLF, за которой следует пробел, за которым следует запрошенный URL ресурса. Ожидается, что ответы будут единым HTML-документом. Конец указанного документа отмечен удалением серверной части соединения. Нет никаких возможностей указывать на успех или неудачу операции. Единственное интерактивное свойство - это строка поиска, которая тесно связана с <isindex> HTML.

Использование HTTP / 0.9 в настоящее время исключительно редко. Это время от времени видно на встроенных системах в качестве альтернативы tftp .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow