跨域socket.io 30秒后中断

Posted

技术标签:

【中文标题】跨域socket.io 30秒后中断【英文标题】:Cross-domain socket.io breaks after 30 seconds 【发布时间】:2013-10-13 07:04:48 【问题描述】:

我有一个简单的聊天服务器 (node.js/express/socket.io),我正在从不同域上的客户端访问它。我已经设置了允许一切的起源,这已经奏效了。但是,在客户端不活动大约 30 秒后,它会收到错误消息“XMLHttpRequest 无法加载 [url]。Access-Control-Allow-Origin 不允许来源。”那时,除非我刷新页面,否则我无法再发送消息。我允许使用io.set('origins', '*:*'); 和使用

app.all('*', function(req, res, next) 
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
);.

我已经尝试了几乎所有我能想到的(禁用心跳、捕获错误并在客户端上重新连接,使用io.server.removeListener('request', io.server.listeners('request')[0]);)。我知道这是一个跨域问题,因为我在本地运行它时没有任何问题。有什么想法吗?

【问题讨论】:

我正在使用 websockets。 【参考方案1】:

我在处理一个将 Twitter-Streaming API 用于聊天系统的项目时遇到了类似的问题。您面临的问题可能是由于Same Origin Policy(更多信息here)

我发现最适合的解决方案是 Cross-Domain Gif request,您会发现 Google 分析脚本中使用的一个概念,对该概念的完整解释可以找到here。

我希望你觉得这很有用。它确实为我完成了这项工作。

【讨论】:

设置访问源不是应该解决同源策略的问题吗?此外,它没有解释为什么它最初工作,然后在一定时间后停止。

以上是关于跨域socket.io 30秒后中断的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 跨域请求被阻止

跨域 Sails.js + Socket.io 授权

Socket.io 跨域问题

Socket.io 跨域问题 - Access-Control-Allow-Origin 不允许来源

vue-socket.io跨域问题的解决方法

如何针对跨域的 PHP 会话 ID 对 Socket.IO 进行身份验证