2.0 KiB
2.0 KiB
CORS问题解决方案
问题描述
前端从 http://101.43.95.130:8038 访问后端 http://localhost:8037 时,浏览器阻止了跨域请求。
错误信息:
Access to XMLHttpRequest at 'http://localhost:8037/auth/register' from origin 'http://101.43.95.130:8038'
has been blocked by CORS policy: The request client is not a secure context and the resource is in
more-private address space `local`.
解决方案
1. 更新后端CORS配置 ✅
在 backend/app/core/config.py 中添加了允许的来源:
CORS_ORIGINS: str = "http://localhost:3000,http://127.0.0.1:3000,http://localhost:8038,http://101.43.95.130:8038"
2. 更新前端API地址 ✅
修改了 frontend/src/api/index.ts,使其能够根据当前主机自动推断后端地址:
- 如果前端运行在
localhost,后端使用http://localhost:8037 - 如果前端运行在公网IP(如
101.43.95.130:8038),后端使用http://101.43.95.130:8037
3. 更新Docker Compose配置 ✅
在 docker-compose.dev.yml 中:
- 前端环境变量:
VITE_API_URL=http://101.43.95.130:8037 - 后端环境变量:添加
CORS_ORIGINS配置
验证
重启服务后,CORS问题应该已解决:
# 重启服务
docker-compose -f docker-compose.dev.yml restart frontend backend
# 验证CORS配置
curl -X OPTIONS http://localhost:8037/api/v1/auth/register \
-H "Origin: http://101.43.95.130:8038" \
-H "Access-Control-Request-Method: POST" \
-v
应该看到 Access-Control-Allow-Origin: http://101.43.95.130:8038 响应头。
注意事项
-
生产环境配置:在生产环境中,应该:
- 使用HTTPS
- 限制CORS来源为实际的前端域名
- 不要使用
*作为允许的来源
-
API路径:确保API路径正确:
- 注册API:
/api/v1/auth/register(不是/auth/register)
- 注册API:
-
网络配置:确保:
- 后端服务监听在
0.0.0.0:8037(不是127.0.0.1) - 防火墙允许8037端口访问
- 后端服务监听在
状态: ✅ 已修复 时间: 2024年