Как заменить URL браузера компонентом Indy TIdHTTPServer? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть Indy HTTP-сервер, использующий компонент TIdHTTPServer.Я хочу, чтобы URL браузера переписывался, как Apache и IIS используют модули перезаписи URL.

Например: если кто-то переходит на https://www.mydomain2.com, я хочу, чтобы URL в браузере отображал https://www.mydomain1.com.

Я почти уверен, что использование Javascript history.pushState не является ответом.

Я пытался использовать Javascript history.pushState('data to be passed', 'Title of the page', '/www.mydomain1.com'); в качестве альтернативы.Однако, когда я перехожу на https://www.mydomain2.com, он добавляется к текущему URL-адресу, например https://www.mydomain2.com/www.domain1.com.

Насколько я понимаю, history.pushState не допускает полную замену URL-адреса из-за проблем безопасности.

Мои заголовки сервера (а я просто стреляю в темноте):

aResponseInfo.CustomHeaders.AddValue('Access-Control-Allow-Origin','*');
aResponseInfo.CustomHeaders.AddValue('Access-Control-Allow-Methods','*');
aResponseInfo.CustomHeaders.AddValue('Access-Control-Allow-Headers',
  'Origin, X-Requested-With, Content-Type, Accept, Authorization');
aResponseInfo.CustomHeaders.AddValue('Cache-Control', 'no-cache');

У меня проблемы с поиском решения.

1 Ответ

0 голосов
/ 20 декабря 2018

Единственный способ сделать это со стороны server - дать клиенту команду запросить новый URL.Для этой цели вы можете использовать метод TIdHTTPResponseInfo.Redirect(), например:

if ARequestInfo.Host = 'www.mydomain2.com' then
  AResponseInfo.Redirect('https://www.mydomain1.com');

Но учтите, что клиент больше не будет БЫТЬ https://www.mydomain2.com, вместо этого он перейдет к https://www.mydomain1.com.

Если вы хотите, чтобы клиент оставался на https://www.mydomain2.com, но отображал https://www.mydomain1.com, это можно сделать только с помощью сценариев на стороне клиента, которые управляют адресной строкой браузера.

...