【问题标题】:Is it possible to rewrite websocket requests when using firebase hosting?使用 firebase 托管时是否可以重写 websocket 请求?
【发布时间】:2022-01-01 00:07:58
【问题描述】:

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

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

但目前尚不清楚这是否适用于 websocket 请求。

我可以确认重写部分有效,因为 ** 重写规则没有捕获到 websocket 请求。使用邮递员进行测试,似乎该请求将“404 Not Found”返回到初始 http 升级请求,而不是“101 切换协议”。

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

【问题讨论】:

    标签: firebase firebase-hosting google-cloud-run


    【解决方案1】:

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

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

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

    【讨论】:

    • 有道理,谢谢!不幸的是,我所在的地区不支持自定义域映射,我想我可以使用负载均衡器,但相对于我的小项目来说它很昂贵。您知道 Cloud Run URL 是否一致吗?有什么不直接连接的理由吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 2017-07-13
    • 2021-01-05
    相关资源
    最近更新 更多