WebSockets(或AJAX长轮询等)可以运行在不同于原始HTTP请求的端口上吗?

我想编写一个应用程序,使用带有node.js和socket.io的WebSockets和Django结合使用,并将通过Redis共享数据(大量的stream行语!)。

如果我运行不同的端口上的节点(例如,5555),我将能够通过WebSocket(或与socket.io回退方法,如长轮询等)连接到它或将相同的原始策略给我问题?

如果是这样,我怎么能绕过他们?

Socket.io支持通常用于跨域长轮询的JSONP轮询(除了每个浏览器都不支持的CORS外)。 关于WebSockets的跨域主题 – 规范说明如下:

服务器包含| Sec-WebSocket-Location |中的主机名 它的握手字段,这样客户端和服务器都可以validation他们同意使用哪个主机。

你应该能够使用不同端口的WebSockets,事实上,你可能别无select,因为标准端口80将被其他Web服务器用来为你的基于Django的应用程序提供服务。 如果您使用相同的域和端口,那么浏览器特定的并行连接限制也会存在潜在的问题(例如,当您尝试在同一浏览器上下文中打开多个选项卡时,您可以在Facebook聊天中看到这一点 – 每个选项卡都连接到长时间轮询期间不同的子域来克服这些限制)。

答案是“有时”。 它非常多的浏览器和安全策略具体。

假设你正在使用Socket.IO …我没有问题,除了Opera无法绕过SOP(相同来源策略)规则。 修复是启用WebSockets。

socket.io确实支持跨域连接(参见FAQ)。 不同的端口将正常工作。

我不确定WebSockets,尽pipeAjax会给你带来问题。 我相信可以通过使用服务器端反向代理解决。