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

tus*_*sar 2 javascript jquery json jsonp cross-domain

我从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);
        });
    });
});?
Run Code Online (Sandbox Code Playgroud)

请注意,我没有使用?callback?带有我的URL,但此请求仍然可以从另一个域获取JSON数据!这对我来说非常令人惊讶.任何人都可以解释为什么这个请求不被同源原则规则拒绝?

Šim*_*das 7

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

Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)

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

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