【问题标题】:Same Origin Policy seemingly inconsistent using jQuery AJAX API使用 jQuery AJAX API 的同源策略看似不一致
【发布时间】:2014-10-09 18:56:47
【问题描述】:

我试图了解同源政策 (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);
    });
});

【问题讨论】:

  • 我不确定为什么第一个有效,但我相信第二个的问题是谷歌默认使用 HTTPS。试试 cnn.com 什么的。
  • 因为第一个资源支持 CORS 而第二个不支持
  • 查看第一个请求的响应标头,您可以找到一些标头,例如 Access-Control-Allow-*
  • 维基百科有一个很好的总结:en.wikipedia.org/wiki/Same-origin_policy

标签: javascript jquery ajax same-origin-policy


【解决方案1】:

我认为这里的不一致是由于第一个资源具有Access-Control-Allow-Origin: *标头,因此它支持CORS并允许来自所有域的脚本使用AJAX和XMLHttpRequests访问数据。

相比之下,google.com 没有,因此尝试从另一个域访问它会出现常见错误。

将该标题添加到任何页面都会绕过同源策略。您也可以使用Access-Control-Allow-Origin: domain 只允许来自域domain 的请求。

查看this,了解有关 CORS 支持的更多信息。

【讨论】:

    猜你喜欢
    • 2012-08-22
    • 2011-07-28
    • 2011-04-01
    • 2012-08-20
    • 1970-01-01
    • 2011-01-28
    • 2012-08-11
    • 2011-07-20
    • 1970-01-01
    相关资源
    最近更新 更多