2

我正在开发一个相对简单的 PhoneGap 应用程序 (iOS),它需要向 Go 服务器发出跨源 websocket 请求。我已经$.support.cors = true; $.mobile.allowCrossDomainPages = true;在我的应用程序中设置了任何网络活动。服务器提供一个简单的 HTML/JavaScript 页面,用于测试/诊断目的,并且一切正常 - websocket 连接正常,服务器提供正确的数据,这一切都很好。

在 iOS 模拟器上运行的 PhoneG 应用程序并非如此。在模拟器中,Safari 实际上可以访问我的测试/诊断页面。但是,PhoneG 应用程序超时。

我正在做更多的调查,但我怀疑这是一个简单的服务器配置问题,并且有人对 Go 和/或有福的 websockets 包有更多的了解,我想我会在调查的同时在这里问。

4

2 回答 2

2

CORS 不适用于 WebSocket。对于 WebSocket,有一个“origin”标头,浏览器必须用包含打开 WS 连接的 JS 的 HTML 的来源来填充该标头。非浏览器客户端可能会或可能不会填充该标题(并且可以用他们喜欢的任何内容填充它)。WS 服务器然后能够决定是否接受连接。

此外:我不知道当 HTML 来自本地文件系统时,PhoneGap 使用的 WebView 是否设置了原始标头。我会尝试窃听流量并查看。

于 2012-06-18T08:47:58.380 回答
0

PhoneGAP 应用程序中没有跨域问题(请记住,此策略是在客户端强制执行的,并且服务器的标头仅给出指示)。

问题可能在于您的握手,因为 PhoneGAP 本身不支持 websocket 握手。有一些开源项目在 PhoneGAP/iOS 中将它作为这个项目引入(由于我不是 iOS 开发人员,所以没有经过我的测试)。

于 2012-06-18T06:06:45.213 回答