Поле заголовка обновления - это поле заголовка HTTP, представленное в HTTP / 1.1 . При обмене клиент начинает с запроса открытого текста , который позже обновляется до более новой версии протокола HTTP или переключается на другой протокол. Клиент должен запросить обновление соединения; если сервер хочет принудительно выполнить обновление, он может отправить 426 Upgrade Required
ответ. Затем клиент может отправить новый запрос с соответствующими заголовками обновления, сохраняя при этом соединение открытым.
Использовать с TLS
Один из вариантов использования - начать запрос через обычный порт HTTP, но переключиться на безопасность транспортного уровня (TLS). [1] На практике такое использование редко, поскольку HTTPS является гораздо более распространенным способом инициирования зашифрованного HTTP.
Сервер возвращает 426
код состояния, чтобы предупредить устаревших клиентов о том, что сбой был связан с клиентом ( 400
коды уровней указывают на сбой клиента).
Этот метод установления безопасного соединения выгоден тем, что он:
- Не требует беспорядочного и проблемного перенаправления URL на стороне сервера;
- Включает виртуальный хостинг защищенных веб-сайтов (хотя HTTPS также позволяет это с помощью указания имени сервера ); а также
- Снижает вероятность путаницы для пользователей, предоставляя единственный способ доступа к определенному ресурсу.
Если одни и те же ресурсы доступны с сервера как через зашифрованные средства защиты, так и через средства незашифрованной очистки, посредник может поддерживать незашифрованное и неаутентифицированное соединение с клиентом при сохранении зашифрованного соединения с сервером.
К недостаткам этого метода можно отнести:
- Клиент не может указать требование для безопасного HTTP в URI (хотя клиент может потребовать это через согласование обновления); а также
- Так как HTTP определяется на хмелевой основе, HTTP туннелирование может потребоваться для обхода прокси - серверов.
Использование с WebSocket
WebSocket также использует этот механизм для установки соединения с HTTP-сервером совместимым способом. [2] Протокол WebSocket состоит из двух частей: рукопожатие для установления обновленного соединения и фактическая передача данных. Во- первых, клиент запрашивает соединение WebSocket при помощи функции Upgrade: WebSocket
и Connection: Upgrade
заголовки, а также несколько протоколов конкретных заголовков , чтобы установить используемую версию и установить рукопожатие. Сервер, если он поддерживает протокол, отвечает тем же Upgrade: WebSocket
и Connection: Upgrade
заголовки и завершает рукопожатие. [3] После успешного завершения рукопожатия начинается передача данных.
Использовать с HTTP / 2
Механизм обновления HTTP используется для установки HTTP / 2, начиная с обычного HTTP. [4] Клиент запускает соединение HTTP / 1.1 и отправляет Upgrade: h2c
заголовок. Если сервер поддерживает HTTP / 2, он отвечает кодом состояния протокола переключения HTTP 101 . Механизм обновления HTTP используется только для открытого текста HTTP2 (h2c). В случае HTTP2 через TLS (h2) вместо него используется расширение протокола ALPN TLS.
Смотрите также
Рекомендации
- ^ RFC 2817
- ^ «Протокол WebSocket» . IETF . Проверено 15 декабря 2013 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ Реймор, Брайан. «WebSockets: стабильно и готово для разработчиков» . Сеть разработчиков Microsoft. Архивировано из оригинального 16 декабря 2013 года . Проверено 15 декабря 2013 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ "Запуск HTTP / 2 для" http "URI" . Протокол передачи гипертекста версии 2 (HTTP / 2) . DOI : 10,17487 / RFC7540 . RFC 7540 .