请求的网址" [无网址]",无效。节点http-proxy

时间:2017-10-23 12:15:56

标签: javascript node.js proxy

我相信我错过了此处代理设置的基本部分,但在使用以下内容时:

var http = require('http'),
    httpProxy = require('http-proxy');
      httpProxy.createProxyServer({target:'http://www.asos.com'}).listen(8000); 

http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2));
    res.end();
}).listen(9000);

由以下人员介绍:

Invalid URL

The requested URL "[no URL]", is invalid.
Reference #9.56731002.1508760714.1524ffde

现在我很确定这是一个输入代理的网址?

我想要做的就是为站点设置代理,然后插入一些自定义js文件。但这是第一步。

1 个答案:

答案 0 :(得分:2)

与您在评论中所说的相反,您尝试访问localhost:8000是正确的。这是您创建的代理的正确端口。

您需要添加以下内容:

changeOrigin: true

完整:

httpProxy.createProxyServer({
    changeOrigin: true,
    target: 'http://www.asos.com'
}).listen(8000);

如果没有该设置,远程服务器将收到带有标头Host: localhost:8000的请求,并且该特定服务器似乎关心Host标头(可能它使用虚拟主机)。结果它不知道如何处理它并且它返回了那个错误。代理成功代理来自远程服务器的错误消息。

您已经从http-proxy文档中清楚地复制了代码,但您似乎误解了它。请注意,在原始示例中,代理targetlocalhost:9000,它与随后创建的服务器相同。因此,该示例的目的是您将访问localhost:8000,并将请求代理到localhost:9000。你尝试做的事情是完全不同的。您的代码创建了两个完全独立的服务器,一个在端口8000上,另一个在端口9000上。

与使用listen方法相比,您可能最好不要查看web方法的示例。