【问题标题】:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at .....跨域请求被阻止:同源策略不允许读取远程资源......
【发布时间】:2015-07-22 21:47:40
【问题描述】:

使用 $http.get 时遇到问题: 跨域请求被阻止:同源策略不允许读取远程资源.....这可以通过将资源移动到同一域或启用 CORS 来解决

$http.get('...').success(function(data){
        console.log(status);
    }).error(function(data){
        //console.log(data)
    });
app.config(['$httpProvider', function($httpProvider) {
        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
    }

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    跨域请求是从一个域向另一个域(在客户端)发出的请求。出于安全原因,默认情况下它们在 Web 中被禁止。因此,如果您在http://www.yours.com 中有一个网页向http://www.other.com/get/resource 发出 AJAX 请求,那么这个 AJAX 请求将被拒绝。这个问题可以通过 3 种方式解决:

    • 将 API (/get/resource)“重定位”到www.yours.com 域(即http://www.yours.com/get/resource),这样 AJAX 请求就不会再跨域了。
    • 转换应用程序的架构,以便来自http://www.yours.com 的请求在后端发出(也不是以 AJAX 的形式),然后在您的网页上传递。
    • 启用http://www.other.com 中的服务器以允许来自http://www.yours.com 的CORS 请求。这可以通过在服务器的响应中添加标题 Origin: http://www.yours.com 来完成。因此,它要求您有权访问第二个服务器的配置。

    CORS 的其他资源:

    1. HTML5 turorial
    2. W3 specification

    【讨论】:

    • @Dimos 我听从了你的建议,但我无法解决 CROS 问题。我正在使用这个 github 项目https://github.com/auth0-blog/angular2-authentication-sample。在 common/headers 中添加了 Access-Control-Allow-Origin: *。仍然无法解决问题。
    • 如果我没有犯一个严重的错误,我认为这个文件中的标头对应于浏览器在 HTTP AJAX 请求期间将发送的标头。但是,您需要在服务器配置中添加 Control-Allow-Origin: * 标头,以便它允许来自不同域的 AJAX 请求。
    • 非常简洁的答案。 +1。顺便问一下,Fetch the API 是什么意思?
    • @JavierGarcíaManzano 感谢您提出这个问题。它是如此模棱两可,以至于我什至有点难以理解三年前的想法!我的意思是将此 API 重新定位到域 www.yours.com,以便 AJAX 请求不会跨域。我会更新我的答案,让它更清楚一点。
    猜你喜欢
    • 2021-04-04
    • 2014-10-17
    • 2018-04-20
    • 2014-07-20
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多