В соответствии с здесь:
Заголовок HTTP Upgrade запрашивает, чтобы сервер переключил протокол прикладного уровня от HTTP до протокола WebSocket.
Клиентское квитирование установило соединение HTTP-on-TCP между IE10 и сервер. После того как сервер вернет свой ответ 101, протокол уровня приложения переключается с HTTP на WebSockets, который использует ранее установленное TCP-соединение.
HTTP на данный момент полностью не соответствует изображению. Используя легкий проводной протокол WebSocket, сообщения могут быть отправлены или полученной любой конечной точкой в любое время.
Итак, я понимаю, что после того, как первый клиент завершил квитирование с сервером, порт сервера 80 будет монополизирован по протоколу WebSocket. И HTTP больше не работает на 80 портах.
Итак, как 2-й клиент обменяет рукопожатие с сервером. После того, как все рукопожатие WebSocket находится в формате HTTP.
ADD 1
Спасибо за все ответы. Они действительно полезны.
Теперь я понимаю, что один и тот же серверный порт 80 разделен несколькими подключениями TCP
. И это совместное использование полностью ОК, потому что TCP
соединения идентифицируются с помощью 5-элементного кортежа как указано Jan-Philip Gehrcke
.
Я хотел бы добавить несколько мыслей.
Оба WebSocket
и HTTP
- это просто протоколы уровня приложений. Обычно оба они полагаются на протокол TCP
в качестве своего транспорта.
Зачем выбирать порт 80?
Дизайн WebSocket преднамеренно выбирает порт 80 сервера как для рукопожатия, так и для связи. Я думаю, что разработчик хочет, чтобы связь WebSocket выглядела как обычная HTTP-связь с точки зрения транспортного уровня (т.е. Номер порта сервера по-прежнему 80). Но в соответствии с ответом jfriend00
этот трюк не всегда обманывает сетевые инфраструктуры.
Как происходит переход протокола из HTTP в WebSocket?
Из RFC 6455 - протокол WebSocket
В принципе, он должен быть как можно ближе к разоблачению raw TCP script, насколько это возможно, с учетом ограничений Сети. Это также разработанный таким образом, что его серверы могут совместно использовать порт с HTTP серверах, имея квитирование в качестве действительного HTTP-обновления. Один может концептуально использовать другие протоколы для создания клиент-сервера обмена сообщениями, но целью WebSockets является предоставление относительно простой протокол, который может сосуществовать с HTTP и развернутым HTTP-протоколом инфраструктуры (например, прокси), и это близко к TCP, как и безопасный для использования с такой инфраструктурой, учитывая соображения безопасности, с целенаправленными дополнениями для упрощения использования и хранения простых вещей простой (например, добавление семантики сообщений).
Поэтому я думаю, что ошибаюсь в следующем утверждении:
Запрос на подтверждение связи имитирует HTTP-запрос, но сообщение, которое следует, нет. Запрос квитирования поступает на сервер на порту 80. Поскольку это порт 80, сервер будет обрабатывать его с помощью протокола HTTP. И поэтому запрос на подтверждение WebSocket должен быть в формате HTTP.Если это так, я думаю, что протокол HTTP ДОЛЖЕН должен быть изменен/расширен до узнайте те вещи, которые связаны с WebSocket. В противном случае он не поймет он должен перейти к протоколу WebSocket.
Я думаю, это должно быть понято так:
Связь с WebSocket начинается с HTTP-запроса действительного. клиент к серверу. Таким образом, сервер следует за протоколом HTTP для анализа запроса на рукопожатие и определить попрошайничество для изменение протокола. И это сервер, который переключает протокол. Так Протокол HTTP не нуждается в изменении. Протокол HTTP даже не нужен знать о WebSocket.
WebSocket и Comet
Таким образом, WebSocket отличается от технологий Comet тем, что WebSoket не ограничивает себя в текущем домене HTTP, чтобы решить двунаправленную проблема связи.
ADD 2
Связанный с этим вопрос: Как браузер устанавливает соединение с веб-сервером на 80 портах? Подробности?