NodeJS 请求的URL“[no URL]"无效,节点http-proxy

kokeuurv  于 2022-12-03  发布在  Node.js
关注(0)|答案(1)|浏览(250)

我相信我错过了代理设置的一个基本部分,但当使用以下:

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

现在我很确定这是一个url输入到代理?
所有我想做的是设置一个代理到一个网站,然后插入一些自定义的js文件。但这是第一步。

hsvhsicv

hsvhsicv1#

与你在评论中所说的相反,你尝试访问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方法的示例。

相关问题