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

FastAPI WebSocket在React中连接失败但Postman可正常连接

问题分析与解决方案

核心问题是浏览器的混合内容限制以及WebSocket协议与ngrok隧道的TLS配置不匹配:

  • Postman不受浏览器安全策略约束,能正常连接ws://端点;但浏览器会阻止从HTTPS页面发起HTTP(包括ws://)的请求,也就是混合内容拦截。
  • ngrok免费版域名默认提供HTTPS服务,对应的WebSocket必须使用加密协议wss://而非ws://。

具体修复步骤

1. 修改React的WebSocket连接协议

将React中的连接代码改为使用wss://:

ws = new WebSocket("wss://possum-enough-informally.ngrok-free.app/client_messages");

2. 调整ngrok的TLS配置

移除bind_tls=False参数,让ngrok自动启用TLS加密(默认行为),配置代码改为:

from pyngrok import ngrok
import uvicorn

port = 5000
  
public_url = ngrok.connect(port, domain="possum-enough-informally.ngrok-free.app").public_url

3. 验证修复

  • 重启FastAPI服务和ngrok隧道
  • 打开浏览器控制台,确认WebSocket连接是否成功;如果仍有错误,查看控制台的具体错误提示(ngrok的证书是受浏览器信任的,无需额外配置)

补充说明

本地环境下ws://能正常工作,是因为localhost通常使用HTTP,不存在混合内容限制;但通过ngrok的公网HTTPS域名访问时,必须使用加密的wss://协议才能绕过浏览器的安全拦截。

内容的提问来源于stack exchange,提问作者Mario Markov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:32:07