Javascript 在维护原始IP地址的同时进行跨域请求

Javascript 在维护原始IP地址的同时进行跨域请求,javascript,node.js,express,Javascript,Node.js,Express,我的第一次尝试是在Express中创建一个反向代理,它允许我请求localhost:3000/request并将其转发到somesite.com/request 我的代码是: var request = require('request'); app.get('/', function(req,res) { var newurl = 'http://google.com/'; request(newurl).pipe(res); }); 这个问题是,它将请求的IP地址更改为我的

我的第一次尝试是在Express中创建一个反向代理,它允许我请求localhost:3000/request并将其转发到somesite.com/request

我的代码是:

var request = require('request');
app.get('/', function(req,res) {
    var newurl = 'http://google.com/';
    request(newurl).pipe(res);
});
这个问题是,它将请求的IP地址更改为我的服务器的IP地址

我的下一次尝试是JSONP,尽管这是一个HTML网页,而不是JSON文件

var tag = document.createElement("script");
tag.src = 'http://example.com/search?q=test';

document.getElementsByTagName("head")[0].appendChild(tag);

错误是:uncaughtsyntaxerror:uncontractedtoken您当然可以使用服务器端代理绕过CORS。您可以使用预先构建的模块来完成这项工作,并为您处理大部分实现

但是,目标站点将看到来自代理服务器IP地址的请求,您无法更改该请求

一个合适的代理将在原始HTTP请求中插入头,该请求包含原始浏览器的IP地址,并且接收服务器可以查看这些附加头(如果选择)。但是,如果它只查看请求实际来自的IP地址,那么它将看到代理服务器的IP地址,您不能更改它。要使数据从代理流向目标服务器,然后通过代理返回到原始浏览器的请求,您的服务器和目标目标之间必须有TCP连接,源IP地址必须是您的服务器,这是数据流回服务器的唯一方式,因此您可以将其转发回浏览器


至于JSONP,JSONP需要目标服务器的协作支持。请求的数据必须以Javascript的形式发送回来,运行时将调用所需的回调函数。如果该服务器不明确支持JSONP,则您不能使用它。

是的,如果您从服务器向另一台服务器发出请求,则向另一台服务器发出的请求的IP地址当然是来自您的服务器。你还期待什么?从A到B的请求将显示它来自A的IP地址。事实上,如果流量将返回到您的Express服务器,然后根据定义,请求来自的IP地址必须是您的Express服务器,以便数据可以发送回Express服务器的IP地址。@jfriend00我希望将传入的IP地址传递给我的web服务器。我想我必须像CloudFlare那样传递自定义标题。代理可以向转发请求的服务器宣布它正在代理请求,并且可以将原始IP地址放入一些头中,以便接收服务器可以在选择查看原始IP地址时查看原始IP地址。关于如何正确代理连接,有一整套规则。我建议您使用node.js中运行的一个预构建模块,它已经为您完成了这项工作,或者您可以阅读各种规格和文章,并学习如何自己完成这项工作。这只在接收服务器实际查找代理指定的头时才有意义。不清楚您试图解决什么问题,也不清楚您到底需要什么帮助。代理请求的IP地址必须来自您的服务器,不是来自原始服务器,否则响应无法返回到您的服务器。我是否可以创建一个Flash应用程序或类似于请求权限的应用程序来运行并发出异地请求?@User-您要向其发出请求的目标站点必须通过承载相应的crossdomain.xml来打开自己以接受跨源Flash请求目标站点上的文件。一些细节和。有没有其他类型的应用程序,我可以嵌入在网站上,使其爬网?Java小程序?@User-No。对于刚通过浏览器访问您的网站的用户,它不会自动工作。其他任何操作都需要用户先安装一些东西,例如浏览器附加组件。浏览器不能从常规网页向非合作网站发出跨源请求。现在禁止这样做有很好的安全理由。