【问题标题】:Which version of websockets protocol draft does google chrome implementgoogle chrome 实现了哪个版本的websockets协议草案
【发布时间】:2011-02-03 04:15:41
【问题描述】:

我正在尝试在 java 中实现 websockets 服务器,但我无法理解 google chrome 实现的 websocket 协议版本。在this 博客文章中,Chromium 团队提到他们已经实现了 websockets 协议的第 76 版,该协议应具有以下握手请求(从官方版本 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

我从谷歌浏览器(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

ïÿÁëƒ^

谁能解释一下为什么谷歌版本和官方规范之间存在差异。谷歌版本的正确响应格式是什么。

PS:有没有人估计 websockets 协议什么时候完成?

【问题讨论】:

标签: google-chrome websocket


【解决方案1】:

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 并且没有额外的安全问题,我怀疑该协议的最终版本不会有太大变化。

但需要注意的是,WebSockets 的浏览器 API 可能不会受到协议更改的影响。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 2018-07-13
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多