1

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

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

  2. 有没有其他更好的机制来实现这个功能?

请提出建议,以便我可以继续实施。

4

4 回答 4

1

我认为默认的方法是使用 jsonp 来绕过跨域限制。 http://en.wikipedia.org/wiki/JSONP。不过,它可能需要更改您的 api。用户通过src传入函数回调的脚本标签请求您的 api。您的 api 会将您的 json 响应返回给指定的函数。

于 2012-04-30T13:40:07.980 回答
1

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

答案是安全。我不能编写一个脚本来单击他们的按钮,该按钮会自动“喜欢”该页面。

使用带有 JSONP 的普通旧 JavaScript 将允许开发人员自动单击按钮。你希望这种情况发生吗?

于 2012-04-30T14:19:52.483 回答
0

这些请求是由浏览器发出的,而不是来自 JS 文件,因此,您的请求每次从另一个域站点发出时都是跨域的。

如果您实施了推荐人验证,您的服务器只会拒绝跨域请求。

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

于 2012-04-30T13:41:35.793 回答
0

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

Access-Control-Allow-Origin: *

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

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

有关跨源资源共享的非常具体的信息,请参见http://www.w3.org/TR/cors/。如果您不喜欢阅读 w3c 文档,请查看MDN 的入门

注意:Internet Explorer 在跨域请求方面做自己的事情。如果您对 IE 有疑问,这个答案是一个好的开始。

于 2012-04-30T13:46:48.007 回答