在保持原始IP地址的同时进行跨域请求

时间:2017-03-17 04:41:45

标签: 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地址更改为我服务器的IP。

我的下一次尝试是JSONP,即使这是一个HTML网页,也不是JSON文件。

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

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

错误是:Uncaught SyntaxError: Unexpected token <

1 个答案:

答案 0 :(得分:1)

您当然可以使用服务器端代理来解决CORS问题。您可以使用node-http-proxy之类的预构建模块来执行此操作,并为您处理大部分实现。

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

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

对于JSONP,JSONP需要来自目标服务器的协作支持(所请求的数据必须在一段Javascript中发回,运行时将调用所需的回调函数)。如果该服务器没有明确支持JSONP,那么您就无法使用它。