You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅Firebase Hosting部署环境下WebSocket连接失败问题排查

问题:Firebase Hosting生产环境WebSocket连接失效,本地/模拟环境正常

应用此前正常运行,数年前突然出现WebSocket连接失效问题。排查后确认:本地运行、使用firebase serve --only hosting启动服务均正常,仅部署到Firebase Hosting生产环境时连接失败。

相关代码

let socket = new WebSocket('wss://api.upbit.com/websocket/v1')

socket.onopen = (e) => {
  console.log('[open] 웹소켓이 열렸습니다');
  socket.send(
    `${JSON.stringify(
      [{ ticket: uuidv4() }, { type: 'ticker', codes: krw.map(c => c.market) }]
    )}`
  )
}

socket.onmessage = async (event) => {
  const ticker = await new Response(event.data).json()
  //...parse response and do something...
}

socket.onclose = (event) => {
  if (event.wasClean) {
    console.log(`[close] 커넥션이 정상적으로 종료되었습니다(code=${event.code} reason=${event.reason})`);
  } else {
    // 예시: 프로세스가 죽거나 네트워크에 장애가 있는 경우
    // event.code가 1006이 됩니다.
    console.warn(`[close] 커넥션이 죽었습니다. ${JSON.stringify(event)}`);
  }
}

socket.onerror = function (error) {
  console.warn(`[error] ${JSON.stringify(error)}`);
}

控制台错误日志

index.5eafb082.js:1  WebSocket connection to 'wss://api.upbit.com/websocket/v1' failed: 
openSocket @ index.5eafb082.js:1
index.5eafb082.js:1 [error] {"isTrusted":true}
index.5eafb082.js:1 [close] 커넥션이 죽었습니다. {"isTrusted":true}

错误对象仅包含{ "isTrusted": true },无有效排查信息。补充原始错误对象的console.error截图:
控制台错误捕获截图

排查思路与解决方案

1. 检查Firebase Hosting的内容安全策略(CSP)

Firebase Hosting生产环境默认有严格的安全规则,可能是规则更新拦截了WebSocket连接:

  • 登录Firebase控制台,进入Hosting > 规则,检查Content-Security-Policy(CSP)配置。
  • 确保CSP的connect-src指令允许wss://api.upbit.com,示例配置:
    {
      "hosting": {
        "headers": [
          {
            "source": "**",
            "headers": [
              {
                "key": "Content-Security-Policy",
                "value": "connect-src 'self' wss://api.upbit.com;"
              }
            ]
          }
        ]
      }
    }
    
  • 部署更新后的配置:firebase deploy --only hosting

2. 排查CDN/代理层干扰

Firebase Hosting依赖CDN服务,可能对WebSocket连接有特殊处理:

  • 检查Firebase Hosting是否启用了缓存或加速规则,临时禁用后重新部署测试。
  • 验证Upbit的WebSocket端点是否支持CDN转发连接,部分服务商可能拦截CDN节点的IP请求。

3. 查看浏览器网络详情

生产环境浏览器安全策略更严格,通过开发者工具获取更多错误信息:

  • 打开浏览器Network标签,找到WebSocket连接请求,查看响应状态码、响应头,确认是否有4xx/5xx错误或额外拦截提示。
  • 确认生产环境使用HTTPS(Firebase默认强制HTTPS),避免混合内容限制。

4. 验证Upbit API访问限制

生产环境IP可能被Upbit的API规则限制:

  • 查阅Upbit API文档,确认是否有IP白名单或请求频率限制,检查Firebase生产环境IP段是否在允许范围内。
  • 尝试用Firebase Functions作为代理转发WebSocket请求,验证是否是前端直接连接的问题。

5. 升级Firebase相关工具与依赖

旧版本工具可能与当前Firebase Hosting不兼容:

  • 升级Firebase CLI到最新版本:npm install -g firebase-tools
  • 检查项目依赖包版本,更新过时的相关库后重新部署。

内容的提问来源于stack exchange,提问作者Guest-01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:50:01