如何从 Firebase 托管重写发送的请求中获取云 运行 服务器上的主机名?

How to get hostname on a Cloud Run server from a request sent from a Firebase Hosting rewrite?

我需要在我的网络应用程序上执行 SSR。由于它是一个国际网站,我需要知道请求该网站的域(主机名),以便我可以为用户呈现适当的语言。

示例:

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

这是设置

以下是 Firebase 重写流量的方式:

firebase.json

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

一切正常。但我注意到所有请求都到达我的云 运行 服务器,主机名如下:

我注意到 Firebase 托管将我的实际域名添加到以下 header:

这是正确的 header 来读取我的域名吗?我没有找到关于此主题的任何文档。

如果用户使用我应用的 Firebase 默认 urls (web.app OR firebaseapp.com) 或通过连接的自定义域访问我的网站,我可以指望 x-forwarded-host header 会一直存在,对吗?

会不会出现 x-forwarded-host 包含 多个 URL 的情况?就像它发生在 x-forwarded-for 与 IPs?

参考文献:


PS: 我注意到如果我直接从云 运行 默认 [=89] 访问我的云 运行 服务器=] .run.appx-forwarded-for header 不存在,这是有道理的,因为它是直接请求,而不是重写的请求。

据此doc,

  1. 这 header 可能是最好的选择,考虑到您分享的所有优点加上:
  • X-Forwarded-Host header 有助于确定最初使用的主机。
  • 此header用于调试、统计和生成location-dependent内容。
  1. 语法是:X-Forwarded-Host: <host>指令是:
<host>
The domain name of the forwarded server.

这意味着您不能在 header 中拥有超过 1 个值。