Files
eSIM-Tools/docs/guides/CORS_SOLUTION.md
Abner ad16472fad 📝 docs: 全面审查并修复项目文档质量
- 重构 ARCHITECTURE.md,拆分未来架构到独立文件,修复 TypeScript 伪代码
- 修正 CLAUDE.md 模块结构图路径与实际代码一致
- 统一 README 中英文版快速开始步骤,补充环境变量配置
- 修复 TOKEN_REFRESH_FIX.md 未声明变量错误
- 统一修复文档格式模板,更新 reference 文件引用路径
- 优化 CORS_SOLUTION.md 标题语义和安全建议
- 补充 SECURITY.md CSP 配置上下文说明
- 调整 User_Guide.md 视频位置,补充扫码安装步骤
2026-05-19 19:30:37 +08:00

4.8 KiB
Raw Blame History

Simyo eSIM CORS 问题解决方案

🔍 问题描述

在使用 Simyo eSIM 工具时遇到了CORS跨域资源共享错误

Access to fetch at 'https://appapi.simyo.nl/simyoapi/api/v1/sessions' from origin 'null'
has been blocked by CORS policy: Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.

🎯 问题原因

  1. CORS策略限制: Simyo的API服务器没有配置允许浏览器直接访问的CORS头
  2. 浏览器安全机制: 现代浏览器阻止跨域请求以保护用户安全
  3. API设计: Simyo API主要为移动应用设计未考虑Web浏览器访问

💡 解决方案

我们提供了一个Node.js代理服务器来解决CORS问题

方案1: 使用代理服务器(推荐)

快速启动

Windows用户:

# 双击运行
start_simyo_server.bat

macOS/Linux用户:

# 添加执行权限并运行
chmod +x start_simyo_server.sh
./start_simyo_server.sh

手动启动:

# 安装依赖
npm install

# 启动服务器
npm start

技术架构

浏览器 → 代理服务器 (localhost:3000) → Simyo API
   ↑                    ↑                      ↑
无CORS限制          添加CORS头              原始API

方案2: 临时绕过 CORS仅开发测试不推荐

安装 CORS 浏览器插件Chrome: "CORS Unblock"Firefox: "CORS Everywhere")。

⚠️ 此方案禁用浏览器同源安全策略,仅限本地开发测试,切勿在日常浏览中开启。

方案3: 禁用浏览器安全策略(仅开发测试)

使用 --disable-web-security 参数启动 Chrome

# Windows
chrome.exe --user-data-dir=/tmp/chrome_dev_test --disable-web-security --disable-features=VizDisplayCompositor

# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/chrome_dev_test --disable-web-security

# Linux
google-chrome --user-data-dir=/tmp/chrome_dev_test --disable-web-security

⚠️ 警告: 此方法会禁用浏览器安全功能,仅用于开发测试

🛠️ 代理服务器详细说明

文件结构

eSIM-Tools/
├── server.js                 # 本地开发服务器 (Express + API代理)
├── package.json              # Node.js项目配置
├── netlify/functions/        # 生产环境Serverless函数
└── src/                      # 前端源代码

API端点映射

前端请求 代理服务器 Simyo API
POST /api/simyo/login POST /sessions
GET /api/simyo/esim GET /esim/get-by-customer
POST /api/simyo/confirm-install POST /esim/reorder-profile-installed

代理服务器功能

  1. CORS处理: 自动添加必要的CORS头
  2. 请求转发: 将前端请求转发到Simyo API
  3. 错误处理: 统一的错误响应格式
  4. 日志记录: 记录所有API请求和响应
  5. 静态文件服务: 直接访问Simyo eSIM工具

安全特性

  • 只代理必要的Simyo API端点
  • 不存储用户凭据
  • 请求日志不包含敏感信息
  • 本地运行,数据不经过第三方服务器

🚀 使用步骤

1. 环境准备

确保已安装Node.js (版本 >= 18.0.0):

node --version
npm --version

2. 启动代理服务器

选择适合您系统的启动方式:

自动启动 (推荐):

  • Windows: 双击 start_simyo_server.bat
  • macOS/Linux: 运行 ./start_simyo_server.sh

手动启动:

npm install
npm start

3. 访问应用

打开浏览器访问: http://localhost:3000

4. 使用Simyo工具

现在可以正常使用 Simyo eSIM 功能CORS问题已解决

🔧 故障排除

端口被占用

如果3000端口被占用修改 server.js:

const PORT = process.env.PORT || 3001; // 改为其他端口

依赖安装失败

# 清除npm缓存
npm cache clean --force

# 重新安装
rm -rf node_modules package-lock.json
npm install

Node.js版本过低

# 检查版本
node --version

# 如果版本 < 18.0.0请升级Node.js
# 下载地址: https://nodejs.org/

📋 测试验证

启动服务器后,可以通过以下方式验证:

1. 健康检查

curl http://localhost:3000/api/health

期望响应:

{
  "success": true,
  "message": "Simyo eSIM代理服务器运行正常",
  "timestamp": "<当前时间戳>",
  "version": "1.0.0"
}

2. 浏览器访问

直接访问: http://localhost:3000

3. API测试

使用Postman或curl测试API端点

🛡️ 安全提示

  • 代理服务器仅监听 localhost,不应暴露到外网
  • 代理不存储用户凭据,请求日志中不包含敏感信息
  • 如需长期使用,推荐使用在线服务 esim.cosr.eu.org 替代本地代理