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

Str*_* B. 9 javascript cors cors-anywhere

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

CORS任何地方

我在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);
};
})();
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*b W 23

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

"要使用API​​,只需在URL前加上API URL." .这就是全部.因此,http://example.com您将要求,而不是请求https://cors-anywhere.herokuapp.com/http://example.com.然后,CORS Anywhere将代表您的应用程序发出请求,并将CORS标头添加到响应中,以便您的Web应用程序可以处理响应.

XMLHttpRequest如果需要,您问题的代码段会自动修改生成的请求的网址.此片段不是必需的,您可以自己添加CORS Anywhere API URL,如演示页面中所做的那样.

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

  • 不幸的是,CORS Anywhere 不再是一个解决方案。由于滥用,它不得不停止服务:https://github.com/Rob--W/cors-anywhere/issues/301 (3认同)
  • @Ryan这不是过时的。Web浏览器自动为跨域请求添加Origin标头。如果使用特殊环境(例如,具有访问外部网站权限的浏览器扩展程序),则可能根本不需要外部CORS代理。存在服务器端检查以节省资源并阻止不必要的代理使用。如果由于某种原因没有自动添加Origin标头,但是您确实需要使用代理,请设置X-Requested-With请求标头。有关更多详细信息,请参见https://github.com/Rob--W/cors-anywhere/pull/145#issuecomment-450528241 (2认同)
  • @Ryan我使用 setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')` 解决了这个问题。([https://robwu.nl/cors-anywhere](https://robwu.nl/cors-anywhere.html) 中的演示使用此行。) (2认同)

Gra*_*ton 15

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

(Rob,请随时纠正这个答案;并感谢CORS Anywhere.它最近给我带来了一大堆麻烦.)

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

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

    npm install cors-anywhere

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

  3. 运行CORS Anywhere.

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

    node cors-anywhere.js

CORS Anywhere以如下消息响应:

Running CORS Anywhere on 127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)

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

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

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

http://remote.server.com:8085/service
Run Code Online (Sandbox Code Playgroud)

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

http://localhost:8080/remote.server.com:8085/service
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢Graham的回答。只是想更新您要更新的第3点。3.在任何地方运行CORS。转到您的节点安装目录,然后键入“ C:\ cors-anywhere \ node_modules \ cors-anywhere \ lib> npm run start”。 (2认同)

Ste*_*ven 5

[我意识到我使用的 corsanywhere 与你的不同。我使用的这个不带连字符,corsanywhere 而不是 cors-anywhere。因此,如果您愿意,可以尝试这个,因为它似乎仍然工作正常:

https://corsanywhere.herokuapp.com/https://api.yelp.com/v3/businesses/search?term=pizza&location=$dallas&sort_by= rating 编辑:看起来这个(没有连字符)可能不是官方版本,所以请谨慎使用。] 1