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