Подтвердить что ты не робот

ExpressJS: как перенаправить запрос POST с параметрами

Мне нужно перенаправить все POST-запросы моего сервера node.js на удаленный сервер.

Я пробовал сделать следующее:

app.post('^*$', function(req, res) {
  res.redirect('http://remoteserver.com' + req.path);
});

Перенаправление работает, но без параметров POST. Что мне следует изменить, чтобы сохранить параметры POST?

4b9b3361

Ответ 1

В HTTP 1.1 есть код состояния (307), который указывает, что запрос должен быть повторен с использованием того же метода и данных post.

307 Временная переадресация (с HTTP/1.1). В этом случае запрос должен быть повторен с другим URI, но будущие запросы все равно могут использовать исходный URI. В отличие от 303, метод запроса не должен изменяться при повторной выдаче первоначального запроса. Например, запрос POST должен быть повторен с использованием другого запроса POST.

В express.js код состояния является первым параметром:

res.redirect(307, 'http://remoteserver.com' + req.path);

Подробнее об этом читайте в programers 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

Сообщение "redirect":

user -> server: POST /
server -> remote: POST /
remote -> server: 200 OK
server -> user: 200 OK