我从JSON-P(来自JSON-P VS JSON和wikipedia)学到的是 - 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数据!这对我来说非常令人惊讶。任何人都可以解释为什么这个请求不会被同源原则规则拒绝?
答案 0 :(得分:7)
这是因为HTTP响应包含这个标题:
Access-Control-Allow-Origin: *
*
表示任何来源都可以通过XHR(Ajax)检索给定资源。
因此,如果您的Web服务器上有资源,并且您希望通过XHR使其可用,而不管其来源如何,只需将上述标头添加到HTTP响应即可。
答案 1 :(得分:3)
Facebook的服务器发出
的标题Access-Control-Allow-Origin: *
此标头由浏览器在调用的第一阶段检索并解析,它指出任何引用者(原始页面)都可以从该URL加载数据。因此绕过了同源政策限制。
有关标准的信息: