Какую версию черновика протокола веб-сокетов реализует Google Chrome - PullRequest
3 голосов
/ 02 февраля 2011

Я пытаюсь реализовать сервер веб-сокетов в Java, но у меня возникают проблемы с пониманием версии протокола веб-сокетов, который реализует Google Chrome. В этом сообщении в блоге команда Chromium упоминает, что они внедрили версию 76 протокола websockets, которая должна иметь следующий запрос рукопожатия (скопировано из официальной спецификации версии 76 (раздел 1.2)):

GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1  .P00
Sec-WebSocket-Protocol: sample
Upgrade: WebSocket
Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5
Origin: http://example.com

^n:ds[4U

где в качестве запроса на рукопожатие, получаемого от Google Chrome (8.0.552.237), указано:

GET / HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8082
Origin: http://localhost:8081
Sec-WebSocket-Key1: g3 I 9w F :  Kt  3?u784C-0 99  5z
Sec-WebSocket-Key2: 4    S5l&Y4m]11+4 032s Ecfl

ïÿÁëƒ^

Может кто-нибудь объяснить, почему существует расхождение между версией Google и официальной спецификацией. И какой будет правильный формат ответа для версии Google.

PS: кто-нибудь оценивает, когда будет завершен протокол websockets?

1 Ответ

4 голосов
/ 02 февраля 2011

Chrome в настоящее время реализует draft-hixie-thewebsocketprotocol-76 , который также известен как draft-ietf-hybi-thewebsocketprotocol-03 . Протокол и спецификации в настоящее время публикуются рабочей группой IETF HyBi, поэтому нумерация 03 на самом деле более правильная, и следующие версии спецификации будут продолжать эту нумерацию (но большинство людей все еще называют ее v76).

Рукопожатие, которое вы получаете от Chrome-8.0.552, соответствует спецификации. Различия заключаются в том, что порядок заголовков может различаться, и ключи будут иметь разные значения для каждого нового соединения, а значения хоста, источника, пути и протокола зависят от того, как Javascript вызывает соединение, а также зависят от URL вызывающего стр.

Ответ будет выглядеть примерно так (хотя не совсем потому, что ответ генерируется на основе рукопожатия клиента):

HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Location: ws://example.com/demo
Sec-WebSocket-Protocol: sample

8jKS'y:G*Co,Wxa-

Я следил за рабочей группой HyBi, и пока неизвестно, когда будет завершен протокол. Тем не менее, уже опубликован новый проект (04), в котором рассматриваются проблемы безопасности поставщиков браузеров. (05) версия, вероятно, будет опубликована в ближайшие несколько недель. Поставщики браузеров, вероятно, не будут внедрять 04 (потому что все еще существуют значительные области с низким консенсусом). Если большинство поставщиков браузеров примут 05 и не возникнут дополнительные проблемы с безопасностью, я подозреваю, что окончательная версия протокола не сильно изменится оттуда.

Важно отметить, однако, что API браузера для WebSockets, скорее всего, не будут затронуты изменениями в протоколе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...