Как получить имя хоста на облачном сервере из запроса, отправленного с перезаписи хостинга Firebase?

#node.js #firebase #firebase-hosting #google-cloud-run

#node.js #firebase #firebase-хостинг #google-cloud-run

Вопрос:

Мне нужно выполнить SSR в моем веб-приложении. И поскольку это международный веб-сайт, мне нужно знать домен (имя хоста), который запрашивает веб-сайт, чтобы я мог отображать на соответствующем языке для пользователя.

Пример:

 https://www.mydomain.co.uk // WILL RENDER IN ENGLISH
https://www.mydomain.es    // WILL RENDER IN SPANISH
 

Вот настройка

  • Экспресс-сервер в облачном докере Node.js контейнер
  • Firebase Hosting перепишет все запросы в контейнер облачного запуска

Вот как Firebase перезаписывает трафик:

firebase.json

 "rewrites": [
      {
        "source": "**",
        "run": {
          "serviceId": "my-server-id",
          "region": "us-central1"
        }
      }
    ]
 

Все работает нормально. Но я заметил, что все запросы достигают моего сервера облачного запуска со следующим именем хоста:

  • req.hostname === "https://my-server-id-on-cloud-run.run.app" , который является URL-адресом облачного запуска по умолчанию для моей серверной службы.

Я заметил, что Firebase Hosting добавляет мое фактическое доменное имя в следующий заголовок:

  • x-forwarded-host: "https://www.mydomain.co.uk" OR "https://www.mydomain.es

Это правильный заголовок для чтения моего домена? Я не нашел никакой документации по этому вопросу.

Если пользователь попадает на мой веб-сайт, используя URL-адреса Firebase по умолчанию в моем приложении ( web.app OR firebaseapp.com ) или через подключенный пользовательский домен, я могу рассчитывать на то, что x-forwarded-host заголовок всегда будет там, правильно?

Может ли быть ситуация, когда x-forwarded-host будет содержать более одного URL-адреса? Как это происходит x-forwarded-for с IP-адресами?

Ссылки:


PS: Я заметил, что если я попаду на свой сервер облачного запуска непосредственно с URL-адреса Cloud Run по умолчанию .run.app , x-forwarded-for заголовок отсутствует, что имеет смысл, учитывая тот факт, что это прямой запрос, а не перезаписанный.

Ответ №1:

Согласно этому документу,

  1. Этот заголовок может быть лучшим вариантом, учитывая все плюсы, которыми вы делитесь plus:
  • X-Forwarded-Host заголовок полезен для определения того, какой хост использовался изначально.
  • Этот заголовок используется для отладки, статистики и генерации содержимого, зависящего от местоположения.
  1. Синтаксис: X-Forwarded-Host: <host> , а директива:
 <host>
The domain name of the forwarded server.
 

Это означает, что в этом заголовке не может быть меньше 1 значения.