本文介绍在使用Node.js构建前后台分离的代理服务器时,httpProxy模块常出现的404错误问题。通过删除请求头中的Host字段,可有效解决因目标服务器对Host校验严格导致的代理失败。
Node.js httpProxy代理404错误排查与修复
在公司内部使用Node.js构建代理服务器以实现前后台分离时,由于代码保密原因无法公开,但在配置httpProxy代理资源时频繁遇到404错误。尽管被代理的接口本身存在,但请求仍无法正确转发。相关代码示例如下:
var http = require('http'),
httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
var server = http.createServer(function(req, res) {
proxy.web(req, res, { target: 'http://www.cnblogs.com/xiaopen/' });
});
console.log("listening on port 5050")
server.listen(5050);
执行后通常会报错或返回404状态码。
解决方案:
在代理请求配置中,主动删除请求头中的Host字段。改进后的代码如下:
var http = require('http'),
httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
var server = http.createServer(function(req, res) {
delete req.headers.host;
proxy.web(req, res, { target: 'http://www.cnblogs.com/xiaopen/' });
});
console.log("listening on port 5050")
server.listen(5050);
修改后,代理请求即可按预期正常运行。
以上即为Node.js中httpProxy代理出现404异常的解决方法,希望对大家有帮助。