如何在任何地方使用Cors来反向代理并添加CORS头

时间:2015-04-16 09:32:30

标签: javascript cors cors-anywhere

我已经阅读了两个小时的反向代理文档来添加CORS标头,我无法使用。您能否帮助一个简单的例子如何使用它。

CORS-ANYWHERE

我在javascript中试过这个例子

(function() {
var cors_api_host = 'cors-anywhere.herokuapp.com';
var cors_api_url = 'https://' + cors_api_host + '/';
var slice = [].slice;
var origin = window.location.protocol + '//' + window.location.host;
var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
    var args = slice.call(arguments);
    var targetOrigin = /^https?:\/\/([^\/]+)/i.exec(args[1]);
    if (targetOrigin && targetOrigin[0].toLowerCase() !== origin &&
        targetOrigin[1] !== cors_api_host) {
        args[1] = cors_api_url + args[1];
    }
    return open.apply(this, args);
};
})();

我真的不明白我是否需要node.js或究竟是什么

3 个答案:

答案 0 :(得分:18)

CORS Anywhere有助于访问来自其他网站的数据,这些数据通常是由网络浏览器的原始政策禁止的。这是通过服务器代理对这些站点的请求来完成的(在本例中用Node.js编写)。

"To use the API, just prefix the URL with the API URL."。这真是全部。因此,您需要http://example.com,而不是请求https://cors-anywhere.herokuapp.com/http://example.com。然后,CORS Anywhere将代表您的应用程序发出请求,并将CORS标头添加到响应中,以便您的Web应用程序可以处理响应。

如果需要,问题的摘要会自动修改XMLHttpRequest生成的请求的网址。此片段不是必需的,您可以自己添加CORS Anywhere API URL,就像完成in the demo page一样。

Github上的存储库(https://github.com/Rob--W/cors-anywhere)包含为CORS Anywhere提供支持的服务器的源代码。如果您是前端开发人员,那么您需要知道的全部内容。如果您的应用程序有很多用户,那么您应该自己托管CORS Anywhere,以避免占用公共CORS Anywhere服务器上的所有资源。

答案 1 :(得分:11)

我顺从罗布,但这是我尝试回答你的问题。

(Rob,请随时更正此答案;感谢CORS Anywhere。它最近给我带来了一大堆麻烦。)

  1. 安装Node.js
  2. 安装CORS Anywhere

    例如,在命令提示符下,输入:

    npm install cors-anywhere

    (此示例命令在node_modules\cors-anywhere的当前目录下安装CORS Anywhere。)

  3. 在任何地方运行CORS。

    例如,在命令提示符下,输入:

    node cors-anywhere.js

  4. CORS Anywhere会回复如下消息:

    Running CORS Anywhere on 127.0.0.1:8080
    

    (IP地址127.0.0.1localhost;您的计算机。)

    您可以在环境变量中指定端口,但我选择在cors-anywhere.js的本地副本中编辑值。

    现在,假设您要在以下URL中使用不支持CORS的Web服务:

    http://remote.server.com:8085/service
    

    您可以使用CORS Anywhere域和端口,然后使用原始URL作为路径组件,而不是使用该原始URL:

    http://localhost:8080/remote.server.com:8085/service
    

    (您可以省略原始网址中的前导http://。)

答案 2 :(得分:0)

您还可以查看以下内容:https://github.com/Zibri/cloudflare-cors-anywhere

您可以在3分钟内将代码上传到免费的cloudflare工作者中!