2

我对 JSON-P 的了解(来自JSON-P VS JSON维基百科)是 - 发明 JSON-P 是为了克服浏览器的同源策略并从另一个域加载 JSON 对象。stackoverflow 上有一篇文章展示了 JSON-P 调用的工作原理。看起来,如果我?callback=?从 URL 中删除,JSON-P 请求就像普通的 JSON 调用一样,因此被同源策略拒绝。这个活生生的例子证明了这一点。

现在我有另一个 URL:https://graph.facebook.com/100001612121705.json 我使用以下方法从中加载数据(访问此处查看实时示例):

$(document).ready(function() {
    $.getJSON("https://graph.facebook.com/100001612121705", null,
    function(data) {
        $.each(data, function(key, val) { 
            alert(key + ' is ' + val);
        });
    });
});​

请注意,我没有将?callback?与我的 URL 一起使用,并且此请求仍然能够从另一个域获取 JSON 数据!这对我来说非常令人惊讶。谁能解释一下为什么这个请求没有被同源规则拒绝?

4

2 回答 2

7

这是因为 HTTP 响应包含此标头:

Access-Control-Allow-Origin: *

*意味着任何来源都可以通过 XHR (Ajax) 检索给定的资源。

因此,如果您的 Web 服务器上有资源,并且希望通过 XHR 使其可用而不管来源,只需将上述标头添加到 HTTP 响应。

于 2012-06-30T14:51:26.360 回答
3

Facebook 的服务器发出一个标头

Access-Control-Allow-Origin: *

此标头由浏览器在调用的第一阶段检索并解析,它表明任何引用者(原始页面)都可以从该 url 加载数据。从而绕过同源策略限制。

有关标准的信息在这里:

跨域资源共享

于 2012-06-30T14:53:20.510 回答