为啥这个 URL 不属于同源策略?
Posted
技术标签:
【中文标题】为啥这个 URL 不属于同源策略?【英文标题】:why this URL is not coming under same origin policy?为什么这个 URL 不属于同源策略? 【发布时间】:2012-07-01 18:21:02 【问题描述】:我对 JSON-P 的了解(来自 JSON-P VS JSON 和 wikipedia)是 - 发明 JSON-P 是为了克服 same origin policy of browsers 并从另一个域加载 JSON 对象。 *** 上有一个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);
);
);
);
请注意,我没有在我的 URL 中使用 ?callback?
,但这个请求仍然能够从另一个域获取 JSON 数据!这对我来说非常令人惊讶。谁能解释一下为什么这个请求没有被同源规则拒绝?
【问题讨论】:
你指的jsFiddle使用的是:"?callback=?" 【参考方案1】:这是因为 HTTP-response 包含此标头:
Access-Control-Allow-Origin: *
*
表示任何来源都可以通过 XHR (Ajax) 检索给定资源。
因此,如果您的网络服务器上有资源,并且希望通过 XHR 使其可用而不管来源,只需将上述标头添加到 HTTP 响应。
【讨论】:
感谢 Šime Vidas 和 @BobDavies 为我解惑。你们两个都已经得到了我的投票。我接受鲍勃的回答,因为他需要更多的声誉。谢谢大家:)【参考方案2】:Facebook 的服务器发出
的标头Access-Control-Allow-Origin: *
此标头在调用的第一阶段由浏览器检索并解析,它表明任何引荐来源(原始页面)都可以从该 url 加载数据。从而绕过同源策略限制。
这里的标准信息:
Cross-Origin Resource Sharing
【讨论】:
以上是关于为啥这个 URL 不属于同源策略?的主要内容,如果未能解决你的问题,请参考以下文章