SEC7118:/socket.io/1/?t=1370206038749 的 XMLHttpRequest 需要跨源资源共享 (CORS)
Posted
技术标签:
【中文标题】SEC7118:/socket.io/1/?t=1370206038749 的 XMLHttpRequest 需要跨源资源共享 (CORS)【英文标题】:SEC7118: XMLHttpRequest for /socket.io/1/?t=1370206038749 required Cross Origin Resource Sharing (CORS) 【发布时间】:2013-05-29 01:30:00 【问题描述】:我在一台服务器上有一个 nodejs 应用程序,该应用程序在端口 443(禁用 apache 侦听)上运行,并带有以下 node.js 包:
Express: 3.2.1
Socket.io: 0.9.14
Request: 2.21.0
Node: 0.11.1
然后我在启用了 nodejs 模块的第二台服务器上有一个 drupal 站点。我在第一个提到的服务器上构建了一个使用 nodejs 应用程序的聊天。一切都很好,直到现在,在经历了很多痛苦之后,我设法让这一切正常工作。除了在 IE10 中。 我在 IE10 的控制台中不断收到错误消息:
SEC7118: XMLHttpRequest for https://mynodejs.com/socket.io/1/?t=1370206038749
required Cross Origin Resource Sharing (CORS).
据我所知,IE10 完全支持 CORS。不知何故,该错误并没有停止加载 socket.io 本身并且打开了一个 websocket。在我的 node.js 应用程序的日志中,用户已获得授权并添加了他的频道。在网站上,使用 IE10 的用户可以看到其他人,甚至可以向其他人发送消息。但他无法接收来自其他聊天用户的消息...
我将 node.js 应用程序设置为返回基本 CORS 的正确标头:
Access-Control-Allow-Origin https://mydrupalsite.com
Access-Control-Allow-Headers Origin, X-Requested-With, X-File-Name, Content-Type, Cache-Control
Access-Control-Allow-Credentials true //with or without, it makes no difference
我故意不包含我的 node.js 应用程序中的任何代码,因为它完全可以在任何其他浏览器上运行。 谁能告诉发生了什么?有没有人成功让 node.js 应用在 IE10 上运行??
【问题讨论】:
尝试将https://mynodejs.com
添加到Access-Control-Allow-Origin
不幸的是,它没有任何区别。我让 nodejs 回显通过 Origin 标头传递的任何域。我意识到其他 nodejs 聊天演示在 IE10 中也有同样的问题,比如 martinsikora.com/nodejs-and-websocket-simple-chat-tutorial
【参考方案1】:
AFAIU,SEC7118 不是错误,而只是一个通知。我用谷歌搜索但没有在任何 MS 网站上找到代码参考;无论如何,当 CORS 适用于 IE10 时,您可以找到 7118 条消息。 这份专注于 CORS 和 IE10 的文档阐明了我的意思(绝对值得一读): http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx
无论如何,我在对 IE10 上的某种 nodejs 聊天(实际上是支持 BOSH 的 js 聊天客户端)进行故障排除时发现了您的问题。在我的情况下,IE10 在发送请求时会在某些 xml 属性前添加“NS1:”,从而造成问题。
因此,您应该仔细检查您的 xml 有效负载,寻找 IE10 和其他(工作)浏览器之间的细微差异(例如我们发现的差异)。希望这会有所帮助。
【讨论】:
以上是关于SEC7118:/socket.io/1/?t=1370206038749 的 XMLHttpRequest 需要跨源资源共享 (CORS)的主要内容,如果未能解决你的问题,请参考以下文章
Socket.io 客户端切换到 xhr-polling 时出错
在 Heroku 上使用集群和 socket.io-redis 扩展 node.js socket.io@1.*.*
Gottox socket.io-java-client“握手时出错原因:java.io.FileNotFoundException:http://192.168.1.69:8080/socket.i