FastAPI WebSocket通过Postman访问返回403 Forbidden问题求助
解决FastAPI WebSocket 403 Forbidden问题的方法
检查CORS配置
FastAPI默认的CORS规则可能会拦截跨域的WebSocket请求。如果你的请求来源和服务端不在同一域名下,得手动配置CORS中间件,允许WebSocket的跨域访问。
修改代码里的CORS配置,确保开启allow_credentials=True,并添加允许的源(测试环境可以临时用["*"],生产环境一定要指定具体域名)。示例代码:from fastapi.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["*"], # 测试环境临时使用,生产替换为实际允许的域名 allow_credentials=True, allow_methods=["*"], allow_headers=["*"], )排查自定义中间件或安全验证
如果你给FastAPI加了自定义中间件(比如权限校验、日志中间件),或者用了OAuth2这类安全依赖,这些组件可能在WebSocket请求到达端点前就返回了403。- 检查所有全局中间件,确认它们不会拦截WebSocket请求——WebSocket请求的方法是
GET,且带有Upgrade: websocket头,可以在中间件里判断这类请求并直接放行。 - 如果WebSocket端点不需要安全验证,确保它没有继承全局的安全依赖,或者给它单独设置允许匿名访问。
- 检查所有全局中间件,确认它们不会拦截WebSocket请求——WebSocket请求的方法是
检查服务器和网络层面的拦截
- 防火墙/安全组:确认服务器的目标端口(注意你写的
30pq可能是输入错误,应该是数字端口,比如3000)已经对外开放,没有拦截WebSocket流量。 - 反向代理(比如Nginx):如果用了反向代理转发请求,必须配置支持WebSocket的转发规则,否则代理会拒绝请求。以Nginx为例,需要添加头信息转发:
location /ws { proxy_pass http://你的FastAPI服务地址:端口; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; }
- 防火墙/安全组:确认服务器的目标端口(注意你写的
检查Postman的请求设置
Postman的WebSocket请求有时候需要确认头信息是否正确。确保请求包含Upgrade: websocket和Connection: Upgrade这两个关键头——Postman通常会自动添加,但可以手动检查:- 打开Postman的WebSocket请求,切换到「Headers」标签页。
- 确认存在这两个头,没有的话手动添加。
内容的提问来源于stack exchange,提问作者Ananda
相关产品推荐
相关产品推荐

