【问题标题】:No 'Access-Control-Allow-Origin' header present AngularJSAngularJS 中没有“Access-Control-Allow-Origin”标头
【发布时间】:2016-11-28 05:17:59
【问题描述】:

我正在尝试构建一个我无法控制我尝试连接的服务器的快速演示站点。这是我使用 AngularJS 构建它的代码。我正在通过一个简单的 Python HTTP 服务器运行该文件并在 localhost:8000 上查看它。 变种检索设备=函数(){ console.log('正在尝试检索设备列表。');

var requestUrl = '****';
    $http({
        method: 'GET',
        url: requestUrl,
    })
    .then(function (response) {
        console.log(response);
    });
};
retrieveAppliances(); 

我已阅读多个地方尝试将method 切换为JSONP,但这样做会导致解析错误。

虽然我考虑过尝试构建一个server.js 文件并使用它运行 NodeJS,但我未能成功学习发出 AJAX 请求并将其代理到我的 app.js 的基础知识。

如果有人能给我提供清晰易懂的步骤,我将不胜感激。

【问题讨论】:

    标签: javascript python angularjs ajax node.js


    【解决方案1】:

    如果您正在对不同的源(例如不同的主机、端口或协议)运行 Ajax 调用,并且该源的服务器不支持跨源请求,那么您无法从客户端修复该问题。客户无能为力。

    如果服务器支持 JSONP,你可以使用它,但这也需要特定的服务器支持。

    浏览器网页的唯一解决方案是:

    1. 目标服务器上的 CORS 支持。
    2. JSONP(也需要目标服务器的支持)。
    3. 设置您自己有权访问的服务器(在您现有的页面域上或使用 CORS),然后让该服务器为您获取文件/数据并将其代理回给您。您可以编写自己的代理或部署预构建的代理。
    4. 找到一些您可以使用的现有第三方代理服务。

    如果您有兴趣制作自己的 node.js 代理,可以在这里查看一个简单的示例:How to create a simple http proxy in node.js?

    【讨论】:

    • 也可以选择第三方代理服务
    • @charlietfl - 我添加了该选项。
    • 赞成。完全同意解决方案。这不是您的 Web 应用程序的问题。这是一个服务器的东西。 @jfriend00 您是否有机会为第 4 点(第三方代理)发布一个小参考?这对我来说是新事物,我想进一步了解它
    • @jfriend00 nvm 关于它。再次阅读后,我想我知道你的意思了。谢谢。
    • @jfriend00 您能否详细说明并帮助我建立自己的服务器?这是我可以用 NodeJS 或 Python 做的吗?如果我确实获得了数据,我将如何将其代理回我的网络应用程序?这就是我知识有限的地方,我开始遇到障碍。
    猜你喜欢
    • 2016-08-12
    • 2016-01-21
    • 1970-01-01
    • 2014-02-01
    • 2017-09-19
    • 2015-04-02
    • 2020-10-24
    • 1970-01-01
    相关资源
    最近更新 更多