gpt4 book ai didi

HTML5 : Latest WebSockets

转载 作者:可可西里 更新时间:2023-11-01 02:49:53 24 4
gpt4 key购买 nike

有人读过 Hickson 2010 年 5 月的 draft-hixie-thewebsocketprotocol-76 WebSocket 协议(protocol)吗?

这是 .htm 文件的来源:

<html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
var socket = new WebSocket('ws://localhost:8181/websession');
socket.onopen = function() {
alert('handshake successfully established. May send data now...');
};
socket.onclose = function() {
alert('connection closed');
};
</script>
</head>
<body>
</body>
</html>

如果我有一个监听 8181 的 TCP 端口,这是我在 Chrome 中加载上面的 .htm 文件时收到的请求:

GET /websession HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
[\n]

(其中 [\n] 是 CRLF 字符。)

我应该返回这个握手开启者什么? draft-hixie-thewebsocketprotocol-76 显示:

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-

不过,此响应会导致 socket.onclose 触发。

最佳答案

Draft 76 将 WebSocket- 响应 header 重命名为 Sec-WebSocket-,并添加了一些不必要的丑陋的 Key header 和请求正文加密内容8jKS'y:G*Co,Wxa- 是一个响应。但这只是对草案中包含的示例的正确响应;为任何其他请求返回该特定字符串是不好的。参见 this post有关如何实现新协议(protocol)的说明。

无论如何,除非您使用的是最新的开发版本,否则 Chrome/Chromium 仍将使用旧的 75 草案协议(protocol)(如您发布的请求所示),并且不会与实现新协议(protocol)的服务器通信协议(protocol)。查看Chromium blog获取更多信息。如果您需要支持旧/当前 Chrome 版本,您实际上必须实现两个 WebSocket 协议(protocol)。

这始终是针对尚未标准化的协议(protocol)开发内容的风险。在 WebSocket 最终确定之前,您可以期待烦人的互操作性;您可能更愿意等到那时。

(试图真正阅读规范并找出在大量不可读的解析算法中究竟发生了什么变化,是一种令人沮丧的练习。我不知道为什么它是这样写的,而不是通常的 BNF 样式规范 RFC就像。就好像 Hixie 用 C 编写了一个解析器,然后编写了一个自动化工具来将代码转换为英语。C 本来更具可读性。)

关于HTML5 : Latest WebSockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3139578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com