Мой второй вопрос: если хост не может быть изменен программно, кто изменил / установил его значение, чтобы сделать его полезным?
Сначала я собираюсь обратиться к этому, потому что я думаю,фон важен для ответа на остальную часть вопроса.
Заголовок Host получен из URL.Дано:
fetch("http://www.example.com/foo/bar")
… заголовок хоста будет www.example.com
.Это так же, как любой другой HTTP-запрос.например, <img src="http://www.example.com/foo.png">
вызовет запрос с помощью Host: www.example.com
.
Аналогично, путь (GET /foo/bar HTTP/1.1
и схема (как клиент подключается к серверу в первую очередь)) также получаются из URL.
Я думал, что могу просто установить для него разные значения в своем запросе на выборку, чтобы мой обратный прокси-сервер дифференцировал запросы и переадресовал на соответствующую службу.
Похоже, вы неправильно понимаете, как работает обратный прокси.
Клиент не делает запрос к обратному прокси-серверу и просит дать вам произвольный URL (так работает прямой прокси-сервер).
Вместо этого человек, управляющий веб-сайтом, настраивает требуемый URL-адрес, чтобы он указывал на обратный прокси-сервер, а затем настраивает обратный прокси-сервер для перенаправления запросов.
Например, вы можете настроить общедоступный доступDNS для указания www.example.com
на сторону обратного прокси-сервера с выходом в Интернет, а затем настройте обратный прокси-сервер для ответа на запросы для https://www.example.com/foo/bar
, выполнив запросТо есть http://private.on.my.lan:8012/myservice/foo/bar
.
Тогда fetch
просто запросит https://www.example.com/foo/bar
, а все остальное будет прозрачно обработано обратным прокси-сервером.
Изменение запросов просто выполняется с помощьюразные URL и, возможно, разные имена хостов.
https://www.example.com/foo/bar
https://www.example.com/baz
https://www.example.net/quack
https://www.example.info/foo/bar
… могут указывать на один и тот же обратный прокси-сервер, который может иметь логику для их обработки по-разному.