我正在尝试了解同源策略 (SOP) 如何适用于不同的情况。
我在本地 HTML 文件中编写了以下 JavaScript 代码,并在 Windows 上使用 Chrome 运行:
$(document).ready(function () {
$.get("http://www.quandl.com/api/v1/datasets/FRED/GDP.json", function (r) {
window.alert(r.source_name);
});
});
它的工作原理是向我提供从另一个域 (www.quandl.com
) 检索到的数据。但是,如果我将其与 google.com
交换,则不会调用回调:
$(document).ready(function () {
$.get("http://www.google.com", function (r) {
window.alert(r);
});
});
最佳答案
我认为这里的不一致是因为第一个资源有一个 Access-Control-Allow-Origin: *
header ,所以它支持 CORS并允许来自所有域的脚本使用 AJAX 和 XMLHttpRequests 访问数据.
相比之下,google.com
没有,因此尝试从另一个域访问它会出现常见的错误。
将该 header 添加到任何页面都将规避同源策略。您还可以执行 Access-Control-Allow-Origin: domain
以仅允许来自域 domain
的请求。
看看this有关 CORS 支持的更多信息。
关于javascript - 使用 jQuery AJAX API 的同源策略看似不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336588/