gpt4 book ai didi

html - WebSocket 不会连接到 127.0.0.1/localhost 以外的任何东西

转载 作者:可可西里 更新时间:2023-11-01 13:16:57 24 4
gpt4 key购买 nike

我有一个由 HTML5/WebSocket 客户端和 HTTP/WS 服务器组成的测试应用程序。两台服务器都使用 C#; HTTP 服务器是我自己的简单东西,WS 服务器也是基于 http://nugget.codeplex.com/ 中的概念自制的. HTTP 服务器在 0.0.0.0:5959 上监听,WS 服务器在 0.0.0.0:5960 上监听(接受来自任何客户端的连接,但在不同的端口上)。

我的 index.html 包含一些打开 WebSocket 到 'ws://'+document.location.hostname+':5960/' 的 JavaScript网页来自,但在端口 5960 上)。 WS 服务器每 100 毫秒发送一次示例数据。总而言之,这是一个非常简单的演示。我在 Windows7 上使用 Chrome 12.0。

我发现 HTTP 服务器可以在任何客户端上工作,无论是我机器上的浏览器指向 127.0.0.1:5959 还是 localhost:5959,并且它在任何机器(我的或远程机器... remote”是我 table 上的另一台 PC :) 命中我服务器机器的工作内部 10 网络地址 10.122.0.159:5959。在 HTTP 领域,一切都按预期工作。

但是,WebSocket 仅适用于 127.0.0.1 和本地主机;远程机器可以从 10.122.0.159:5959 成功获取 HTML,但 WebSocket 不会连接到 10.122.0.159:5960。事实上,当我将我的本地浏览器指向它自己的 10 网络地址 (10.122.0.159:5959) 时,我得到相同的结果 - HTML 加载但 WebSocket 不连接。

关于为什么会发生这种情况有什么想法吗?CORS 是否要求 WS 使用与发起 HTTP 请求相同的端口?如果是这样,127.0.0.1 的规则是否有特殊异常(exception)?

非常感谢,
-戴夫

更新
这似乎是由代理服务器阻止 ws://请求引起的。我们公司使用代理服务器进行内容过滤和所有常见的东西,我们的浏览器配置为使用它。
Chrome 使用 IE 的代理设置,IE 的默认设置是本地主机 使用代理服务器。当我选中该框以让本地连接也使用代理服务器时,我对本地主机的 ws://请求被阻止。相反,当我取消选中“使用代理服务器”框时,我的服务器确实接收 WS 请求。与远程机器类似,如果我关闭远程机器上的代理,我的服务器接收 ws://请求。
所以这是一个代理问题,而不是 CORS 或套接字问题,现在我要和我们的 IT 人员一起探索代理设置。

最佳答案

WebSocket 对跨源没有限制,除了握手中的 CORS 安全性。

听起来您的 WebSocket 服务器有问题,它只在本地主机上监听连接。我会向 Nugget (WebSocketServer.cs) 中的 OnClientConnect 例程添加一些调试输出,以便您可以查看何时发生套接字连接。如果您真的认为这不是服务器的问题,那么我建议您使用 wireshark并将本地主机连接与远程连接进行比较。

此外,如果您在 IE 9 中使用 SilverLight WebSocket 原型(prototype) ( README ),则 WebSocket 连接只能使用端口 4502-4534。对于本地主机,此限制可能已取消。

关于html - WebSocket 不会连接到 127.0.0.1/localhost 以外的任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6426681/

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