Files
aiagent/CORS问题解决.md
2026-01-19 00:09:36 +08:00

2.0 KiB
Raw Blame History

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
  • 如果前端运行在公网IP101.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 响应头。

注意事项

  1. 生产环境配置:在生产环境中,应该:

    • 使用HTTPS
    • 限制CORS来源为实际的前端域名
    • 不要使用 * 作为允许的来源
  2. API路径确保API路径正确

    • 注册API/api/v1/auth/register(不是 /auth/register
  3. 网络配置:确保:

    • 后端服务监听在 0.0.0.0:8037(不是 127.0.0.1
    • 防火墙允许8037端口访问

状态: 已修复 时间: 2024年