определение
HTTP 101 Switching Protocol
(Переключение протокола) Представление кода состояниясерверотвечатьклиентСоглашение об обновлениизапрос на переключение протокола.
Принцип реализации переключения протоколов
-
Connection: Upgrade
ДолженConnection
заголовок установлен на"Upgrade"
Требования к обновлению указаны в .Upgrade:
сказалprotocolsUpgrade
Одно или несколько имен протоколов, разделенных запятыми, указанных в заголовке. - Проверьте, поддерживает ли сервер протокол, требуемый клиентом.
- - Сервер может отклонить обновление - в этом случае он возвращает нормальный. или принять обновление, и в этом случае он отправляет
"101 Switching Protocols"
Заголовок, определяющий выбранный протокол с заголовком обновления.
Давайте рассмотрим практический пример:
Сценарии применения
Этот механизм всегдаклиентинициируется, и сервер может принять или отклонить переключение на новый протокол. Клиент может использовать широко используемый протокол (например, HTTP/1.1) для инициирования запроса, описание запроса должно измениться наHTTP / 2или даже кВеб-сокет.
сценарий веб-сокета
Чтобы реализовать связь WebSocket, клиенту сначала необходимо инициировать обычный HTTP-запрос. То есть создание WebSocket зависит от HTTP. Сообщение запроса может выглядеть так:
GET ws://websocket.example.com/ HTTP/1.1
Host: websocket.example.com
Upgrade: websocket
Connection: Upgrade
Origin: http://example.com
Sec-WebSocket-Key:pAloKxsGSHtpIHrJdWLvzQ==
Sec-WebSocket-Version:13
где поле заголовка HTTPUpgrade: websocket
а такжеConnection: Upgrade
Очень важно сообщить серверу, что протокол связи будет изменен на протокол WebSocket. После подтверждения вышеуказанного запроса сервер, поддерживающий WebSocket, должен вернуть код состояния как101 Switching Protocols
ответ на:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: nRu4KAPUPjjWYrnzxDVeqOxCvlM=
где полеSec-WebSocket-Accept
отправляется сервером предыдущему клиентуSec-WebSocket-Key
Результат после подтверждения и шифрования эквивалентен проверке, чтобы помочь клиенту убедиться, что другая сторона является реальным и доступным сервером WebSocket.
После прохождения проверки ответ рукопожатия устанавливает соединение WebSocket, после чего сервер может активно отправлять информацию клиенту. Состояние в это время больше похоже на то, что сервер и клиент подключились к телефону.Неважно, у кого есть какая-либо информация, чтобы сообщить другой стороне, просто говорите.
Как только соединение WebSocket установлено, последующая связь больше не использует HTTP, а вместо этого использует фреймы данных, независимые от WebSocket.
Весь процесс происходит так: