CORS和跨域消息传递看起来与我相同:它们允许跨域通信。
是否有任何理由使用其中一种?
答案 0 :(得分:10)
CORS适用于闪存通常不允许的ajax请求或闪存请求。例如,如果域x没有跨域策略,并且您通过闪存从那里检索mp3文件进行播放,则flash不允许您读取mp3文件的id3标签。对于ajax,如果目标服务器没有允许您的域发出请求的跨域策略,则您无法提出请求。
跨域消息传递允许您与来自不同来源的文档中的iframe进行通信。例如,如果您有youtube视频iframe,则可以将消息传递给该iframe以更改音量。通常不会进行任何通信,因为iframe的来源不同,因此您无法以编程方式对youtube iframe执行任何操作。
使用其中一种或另一种的原因现在应该清楚了。 CORS允许您在主窗口和iframe之间传递消息时使用来自其他来源的数据,当您想要与iframe内部但不在同一来源的应用程序进行通信时。
一个实际的例子:
1.你有一个拥有youtube播放器的iframe。
2.您要求从youtube数据api播放一些视频(CORS,可能是JSONP,XHR或其他)。
3.您现在将跨域邮件传递给iframe,以开始播放您在步骤2中请求的任何视频
答案 1 :(得分:1)
首先,您应该知道以下浏览器支持CORS:Internet Explorer 8 +,Firefox 3.5 +,Safari 4+和Chrome。请注意,IE7和旧版本的Firefox和Safari根本不支持它。但事件IE8有一些限制 - 它不支持凭据和“预检”请求发送到服务器。 此外,您的服务器应该为CORS请求做好准备,即也应该执行服务器上的一些额外工作。
使用JSONP或iFrame的跨域消息传递在浏览器支持方面更为通用,有时甚至不需要额外的服务器端工作。
答案 2 :(得分:0)
我相信问题的精神是“对于进行跨域XHR,CORS和基于iframe + postMessage的方法的相对优缺点是什么?”
解释它们的用途并没有真正帮助回答这个问题。
在这里,我尝试从服务提供商的角度回答这个问题,该提供商希望向特定的已知页面/域提供“服务”(数据,行为),并且需要那些域能够“呼入”到它。
(请调整/纠正/添加!)