← 返回首页

CORS 跨域问题解决完全指南

**创建时间:** 2026-03-27

**更新时间:** 2026-03-27

**阅读时间:** 约 12 分钟

---

什么是 CORS?

CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种安全机制,用于限制 Web 应用程序如何从一个域请求另一个域的资源。它是浏览器实施的同源策略(Same-Origin Policy)的扩展。

为什么需要 CORS?

同源策略是浏览器的核心安全特性,它阻止一个源的文档或脚本与另一个源的资源进行交互。这里的"源"由三部分组成:

| 组成部分 | 说明 | 示例 |

|----------|------|------|

| 协议(Protocol) | 使用的通信协议 | http、https |

| 域名(Domain) | 服务器的域名 | example.com |

| 端口(Port) | 服务器端口号 | 80、443、8080 |

只有当这三个部分完全相同时,才被认为是"同源"。

跨域场景示例

✅ 同源(允许访问):

https://example.com/page1.html → https://example.com/page2.html

https://example.com:443/api → https://example.com:443/data

❌ 跨域(受 CORS 限制):

https://example.com → https://api.example.com(域名不同)

http://example.com → https://example.com(协议不同)

https://example.com:8080 → https://example.com:443(端口不同)

---

CORS 工作原理

简单请求 vs 预检请求流程对比

sequenceDiagram
    participant B as 浏览器
    participant F as 前端 origin: example.com
    participant S as API api.other.com
    Note over B,F,S: 简单请求 (GET/POST + 简单类型)
    B->>S: GET /data
Origin: example.com S->>B: 200 OK
Access-Control-Allow-Origin: * Note over B: 检查 ACAH 存在
允许跨域 Note over B,F,S: 预检请求 (复杂请求) B->>S: OPTIONS /data
Origin: example.com
Access-Control-Request-Method: PUT S->>B: 200 OK
Access-Control-Allow-Methods: PUT B->>S: PUT /data
Origin: example.com S->>B: 200 OK
Access-Control-Allow-Origin: *

简单请求(Simple Request)

满足以下所有条件的请求被视为简单请求:

---

**最后更新:** 2026-03-27

**作者:** 网事小栈