Кратко
- По RFC 9110 клиент может отправить
Upgrade, приглашая сменить протокол в том же соединении; сервер может это приглашение проигнорировать, а посредник обязан удалить поле, относящееся к соединению, перед обычной пересылкой. - Доказательство завершённого перехода начинается с корректного ответа
101 Switching Protocols, выбирающего предложенный протокол, и включает завершение исходного запроса и первый корректный обмен по новому протоколу.
Представим панель миграции, которая видит Upgrade: websocket в запросе и сразу помечает сеанс как «WebSocket включён». Однако прокси между клиентом и исходным сервером исполняет указание Connection и удаляет приглашение для конкретного участка. Сервер его не получает и возвращает обычный 200 OK по HTTP/1.1. Ни одна сторона не меняет протокол, но панель фиксирует успех, потому что приняла предложение за результат.
Это гипотетический сбой контроля, а не сообщение о конкретном сервисе. Ошибка относится к доказательствам: заголовок, замеченный в одной точке, не может установить переход состояния, для которого нужны упорядоченные наблюдения по обе стороны границы.
RFC 9110 определяет Upgrade как механизм перехода с HTTP/1.1 на другой протокол в том же соединении. Клиент может отправить упорядоченный по предпочтению список протоколов и пригласить сервер к переходу. Сервер может проигнорировать приглашение. Поле выражает готовность и приоритет, но не принятие, успех согласования или рабочую доступность.
Приглашение относится к конкретному соединению. Отправитель Upgrade обязан также включить upgrade в поле Connection. Это не позволяет посредникам бездумно пересылать полученную опцию как сквозную. Посредник сначала удаляет поля, перечисленные в Connection. Если прокси поддерживает запрошенный протокол и решает пригласить следующий узел, он может создать новое поле Upgrade для этого участка и обязан включить upgrade в собственное поле Connection пересылаемого сообщения. Поэтому запись на стороне клиента не доказывает, что исходный сервер видел то же предложение; серверная запись не доказывает неизменную доставку ответа клиенту. Сервер HTTP/1.0, получивший Upgrade, обязан его игнорировать.
Корректное принятие имеет более строгую форму. Сервер, переключающий протокол, обязан отправить 101 Switching Protocols и поле Upgrade с выбранным протоколом. Он не вправе выбирать протокол, которого клиент не предлагал. Поэтому 101 — граница решения: до неё клиент только предлагает, а после корректного ответа стороны согласуют новую интерпретацию того же соединения.
Но одной строки 101 недостаточно. Клиент не может начать новый протокол, пока полностью не отправит запрос с приглашением. Сервер не вправе переключаться, если новый протокол не способен сохранить семантику полученного сообщения. После перехода ожидается, что сервер продолжит отвечать на исходный запрос в форме, эквивалентной HTTP-ответу внутри выбранного протокола. Операционное доказательство требует границы завершения запроса и первого правильно сформированного обмена.
Механизм не меняет нижележащий транспорт и не создаёт другое соединение. Меняется только верхний прикладной протокол существующего соединения. Если телеметрия связывает предложение на одном соединении с 101 или кадром на другом, она создаёт переход, которого стандарт не описывает. Нужны идентификатор соединения, порядок байтов и направление захвата.
Этот ракурс отличается от R067 о полноте Via, R064 о Alt-Svc и альтернативном пути, Strategic Local о восстановлении приоритета и B842 о корреляции временных IPv6-идентификаторов. Здесь контролируется привязанное к соединению переключение прикладного протокола, а доказательством служит упорядоченная запись согласования и обмена.
Надёжная запись связывает точный запрос, упорядоченные предложения, токены Connection, наблюдения до и после каждого посредника, итоговый статус, выбранный протокол, завершение байтов запроса, точку переключения, первое корректное сообщение нового протокола, откат или закрытие. Такая запись не является протокольным элементом IETF; это редакционное объединение эксплуатационных доказательств. «Предложение замечено» всегда должно отличаться от «переход завершён».
Источники
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров

