使用 firebase 托管时是否可以重写 websocket 请求?

Is it possible to rewrite websocket requests when using firebase hosting?

有一个 rewrite feature 允许将对 firebase 静态站点的请求写入云 运行 函数:

"hosting": {
  ...
  "rewrites": [{
    "source": "/api",
    "run": {
      "serviceId": "my-api",
    }
  }]
}

然而,尚不清楚这是否适用于 websocket 请求。

我可以确认重写部分工作正常,因为 websocket 请求没有被 ** 重写规则捕获。用邮递员测试似乎请求 returns“404 未找到”到初始 http 升级请求而不是“101 切换协议”。

将 websocket 直接连接到云 运行 域工作正常。

Firebase Hosting 可以比作 CDN 而不是基本代理。当用户针对它发出请求时,将根据 documented order for response handling 处理响应,并将每个请求作为 HTTP(S) 请求处理。

如果使用 Cloud Functions 或 Cloud 运行 对 serve dynamic content 的重写,将根据 Firebase Hosting 的内部缓存 CDN 检查请求,如果存储的响应不是可用或已过期。根据我对其工作原理的理解,这些步骤是通过多个内部请求实现的,而不是直接通过流式传输客户端请求。

相反,您将屏蔽 Cloud Run with a custom domain(在撰写本文时处于预览状态),例如 ws.yourapp.com,这样您就可以跳过 Firebase 托管的 CDN,但仍然有一个用户友好的 URL.虽然您也可以使用 rewrite/redirect 规则将 yourapp.com/api 重定向到 ws.yourapp.com,但是您正在使用的网络套接字客户端必须支持重定向(因为它不是网络套接字规范的必需部分) .