为什么这个URL不属于同一原产地政策?

时间:2012-06-30 14:45:42

标签: javascript jquery json cross-domain jsonp

我从JSON-P(来自JSON-P VS JSONwikipedia)学到的是 - JSON-P的发明是为了克服same origin policy of browsers并从另一个域加载JSON对象。 stackoverflow上有一个post,它显示了JSON-P调用的工作方式。看来,如果我从URL中删除?callback=?,JSON-P请求就像普通的JSON调用一样,因此被相同的源策略拒绝。这由this live example 证实。

现在我有另一个网址:https://graph.facebook.com/100001612121705.json 我使用以下方法从中加载数据(visit here for live example):

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

请注意,我没有将?callback?与我的网址一起使用,但此请求仍可以从其他域获取JSON数据!这对我来说非常令人惊讶。任何人都可以解释为什么这个请求不会被同源原则规则拒绝?

2 个答案:

答案 0 :(得分:7)

这是因为HTTP响应包含这个标题:

Access-Control-Allow-Origin: *

*表示任何来源都可以通过XHR(Ajax)检索给定资源。

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

答案 1 :(得分:3)

Facebook的服务器发出

的标题
Access-Control-Allow-Origin: *

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

有关标准的信息:

Cross-Origin Resource Sharing