我正在开发一个相对简单的PhoneGap应用程序(iOS),它需要向Go服务器发出跨源websocket请求。在任何网络活动之前,我已经在应用程序中设置了$.support.cors = true; $.mobile.allowCrossDomainPages = true;
。服务器提供一个简单的HTML/JavaScript页面用于测试/诊断目的,在那里一切正常 - websocket连接工作,服务器提供正确的数据,这一切都是花花公子。
iOS模拟器上运行的PhoneG应用程序并非如此。在模拟器中,Safari实际上可以访问我的测试/诊断页面。但是,PhoneG应用程序超时。
我正在做更多的调查,但我怀疑这是一个简单的服务器配置问题,并且对 Go 和/或祝福的 websockets 包有更多了解的人,我想我会在调查的同时在这里问。
CORS 不适用于 WebSocket。使用 WebSocket,有一个"origin"标头,浏览器必须用包含打开 WS 连接的 JS 的 HTML 的源填充该标头。非浏览器客户端可能会也可能不会填充该标头(并且无论如何都可以用他们喜欢的任何内容填充它)。然后,WS 服务器能够决定是否接受连接。
进一步:我不知道当HTML来自本地文件系统时,PhoneGap使用的WebView是否设置了源标头。我会尝试窃听交通并看看。
PhoneGAP 应用程序中没有跨域问题(请记住,此策略是强制执行的客户端,服务器的标头仅提供指示)。
问题可能出在您的握手上,因为PhoneGAP本身不支持websocket握手。有一些开源项目在PhoneGAP/iOS中引入了它(我没有测试,因为我不是iOS开发人员)。