跨域API调用阻碍了Javascript API

时间:2012-04-30 13:30:09

标签: javascript jquery iframe cross-domain

我需要为我的社交网站提供类似于“与Facebook共享”的功能。 Facebook使用嵌套的iframe和xd_receiver概念。我想编写一个JavaScript API(我的域上托管的JS文件),可以被不同的站点用来调用我的Web服务器API,以便在我的社交网站上共享,发布或推荐。我有几个问题 -

  1. 即使我提供了JS API,并且diff站点使用源加载JS文件,如果进行任何API调用,它将再次成为跨域调用(如果我正确理解)并且将是在服务器上被拒绝了? 如何克服这种情况?

  2. 是否还有其他更好的机制来实现此功能?

  3. 请建议我继续执行。

4 个答案:

答案 0 :(得分:1)

我认为默认方式是使用jsonp来克服跨域限制。 http://en.wikipedia.org/wiki/JSONP。它可能需要改变你的api。用户通过传递函数回调的脚本标记的src请求您的api。您的api将返回将json响应传递给指定的函数。

答案 1 :(得分:1)

你知道为什么他们使用iframe而不是简单的使用JSONP / Images / scripts获取请求吗?

答案是安全。我无法编写一个单击其按钮的脚本,该按钮将自动“喜欢”该页面。

将普通旧JavaScript与JSONP一起使用将允许开发人员自动单击该按钮。你想要那样吗?

答案 2 :(得分:0)

请求是由浏览器而不是JS文件发出的,因此,您的请求每次从其他域站点发出时都是跨域的。

如果您实施引荐来源验证,您的服务器将仅拒绝跨域请求。

如果您的API需要来自您网站的自定义内容,则可以使用JSONP

答案 3 :(得分:0)

要允许跨域请求,您需要在HTTP响应中设置以下标头:

Access-Control-Allow-Origin: *

实施将根据您使用的后端而有所不同。

如果请求的Origin标头中的主机不是请求的主机,则响应必须包含Access-Control-Allow-Origin标头中列出的Origin。将此标题设置为*将允许所有来源。

有关跨源资源共享的非常具体的信息,请参阅http://www.w3.org/TR/cors/。如果您在阅读w3c文档时不大,请查看MDN's primer

注意:Internet Explorer对跨域请求有自己的意义。如果你有IE问题,这个answer是一个好的开始。