Перенаправление в express без изменения URL - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть 2 сервера, скажем, сервер A и сервер B, а сервер A - это сервер, отвечающий за обработку запросов и перенаправление их на сервер B.
Итак, мой вопрос, могу ли я, в nodeJS перенаправить без изменения URL? У меня есть этот пример кода, работающего на 127.0.0.1 и другом Apache сервере, работающем на 192.168.1.112.

const path = require('path');
const express = require('express');
const app = express();

const mRouter = express.Router();
mRouter.get('/', (req, res, next) => {
    res.sendFile(path.resolve('index.html'));
});

mRouter.get('/B', (req, res, next) => {
    res.redirect('http://192.168.1.112');
});

app.use('/', mRouter);

app.listen(80);

И индекс. html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Index page</title>
</head>
<body>
    <h1>Hello world</h1>
    <a href="/B">B Server</a>
</body>
</html>

Когда я нажмите на ссылку, которую он перенаправляет в правильное место, но также изменяет URL-адрес на «http://192.168.1.112», могу ли я помешать ему изменить URL-адрес?

Редактировать:
Например, у меня есть сервер A, работающий на локальном хосте, и каждый запрос на 127.0.0.1/B запрашивается с 192.168.1.112 (сервер B). Проблема в том, что сервер B перенаправляет на index.php / *, и если я использую обратный прокси-сервер, путь указывается в URL. Есть ли способ удалить URL-путь с сервера B?

1 Ответ

0 голосов
/ 02 февраля 2020

Ваш сервер не может заставить браузер l ie относительно URL (со стороны сервера). Таким образом, редирект всегда будет показывать фактический URL

Вы можете, однако, иметь прокси-сервер serverA (вместо перенаправления) с serverB, чтобы данные с serverB фактически поступали с serverA, и затем serverA показывался бы в URL, потому что (что касается браузера), эти данные пришли с сервера URL. При проксировании браузер отправляет запрос на serverA, а затем при обработке запрашивающего serverA понимает, что ему нужны некоторые данные от serverB, он go сам получает эти данные из serverB и затем возвращает их в качестве ответа на Исходный запрос к серверу. Браузер воспримет это как запрос от сервера А (хотя данные на самом деле поступили с сервера В).

Чтобы получить данные с сервера В, сервер А может просто отправить запрос http с использованием библиотеки, такой как request. Вы извлекаете данные с другого сервера, используя этот http-вызов, а затем возвращаете их как результат запроса, который вы получили.

const request = require('request');

mRouter.get('/B', (req, res, next) => {
    // get actual data from other server and return it as our response
    request('http://192.168.1.112/B').pipe(res);
});

В качестве другого варианта, со стороны клиента, если вы выбирали данные через Ajax вызовы со страницы браузера вы также можете увидеть перенаправление, go получить данные от serverB и вставить их на страницу serverA. Динамическое изменение содержимого страницы с помощью браузера Javascript не приводит к изменению URL-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...