【问题标题】:WebSocket only works when executing on local file:/// pageWebSocket 仅在本地 file:/// 页面上执行时有效
【发布时间】:2011-02-06 00:34:39
【问题描述】:

我正在试验 HTML5 WebSockets,我的基本客户端/服务器场景使用 Nugget 工作。但是,它仅在我执行本地 HTML 文件 (file:///) 时有效;只要我通过http://localhost/ 执行它就会失败。

因此,从 file:/// HTML 文件连接到 localhost 是可行的,但通过 http://localhost/ 连接到 localhost 会失败。这很奇怪也很烦人,因为我希望能够在我的家庭网络中使用它。

我认为这可能是因为来源不同(不同的端口),但这不是原因,因为端口必须不同,以免Apache响应WebSocket请求。

客户端代码本身是最基本的形式:

var ws;

function wsi() {
 ws = new WebSocket('ws://localhost:8887/consoleappsample');

 ws.onmessage = function (evt) {
  alert(evt.data);
 }
}

window.onload = wsi;

有人看到我做错了什么吗?

【问题讨论】:

  • 你试过检查document.domain吗?
  • 对于 file:/// 文件,它返回一个空字符串(并且套接字有效),对于 localhost 它返回“localhost”(并且套接字无效)
  • 你用哪个浏览器来测试这个?
  • 忘了说;这是 Chrome 9。
  • 你在使用 web-socket.js 吗?或者只是浏览器中的 websocket

标签: javascript html websocket


【解决方案1】:

我终于解决了。

在服务器中,必须添加以下内容(* 而不是null),当然要替换 x:

var nugget = new WebSocketServer(8887, "*", "ws://192.168.x.x:8887");

然后,在 HandshakeHandler.cs 中,添加以下内容(当前不存在最后一个条件):

if (hasRequiredFields && "ws://"+ClientHandshake.Host == Location && (ClientHandshake.Origin == Origin || Origin=="*"))

感谢所有回复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多