我需要将我的 node.js 服务器的所有 POST 请求重定向到远程服务器。
我尝试执行以下操作:
app.post('^*$', function(req, res) {
res.redirect('http://remoteserver.com' + req.path);
});
重定向有效,但没有 POST 参数。我应该修改什么以保留 POST 参数?
在 HTTP 1.1 中,有一个状态码 (307) 表示应该使用相同的方法重复请求并发布数据。
307 临时重定向(HTTP/1.1 起) 在这种情况下,应该使用另一个 URI 重复请求,但以后的请求仍然可以使用原始 URI。与 303 不同的是,在重新发出原始请求时不应更改请求方法。例如,必须使用另一个 POST 请求重复一个 POST 请求。
在 express.js 中,状态码是第一个参数:
res.redirect(307, 'http://remoteserver.com' + req.path);
在程序员 stackexchange上阅读有关它的更多信息。
如果这不起作用,您还可以代表用户从服务器向另一台服务器发出 POST 请求。但请注意,发出请求的将是您的服务器,而不是用户。您实质上将代理请求。
var request = require('request'); // npm install request
app.post('^*$', function(req, res) {
request({ url: 'http://remoteserver.com' + req.path, headers: req.headers, body: req.body }, function(err, remoteResponse, remoteBody) {
if (err) { return res.status(500).end('Error'); }
res.writeHead(...); // copy all headers from remoteResponse
res.end(remoteBody);
});
});
正常重定向:
user -> server: GET /
server -> user: Location: http://remote/
user -> remote: GET /
remote -> user: 200 OK
发布“重定向”:
user -> server: POST /
server -> remote: POST /
remote -> server: 200 OK
server -> user: 200 OK