CORS 测试

CORS 检查器

检查 API 是否接受来自你 origin 的请求。运行预检 OPTIONS 和实际请求,显示所有 Access-Control-* 头部。

CORS 是什么?

CORS (Cross-Origin Resource Sharing) 是浏览器的安全机制。默认情况下,https://a.com 上的脚本无法读取 https://b.com 的响应。b.com 的服务器必须通过发送 Access-Control-Allow-Origin 头部显式允许。对非简单请求 (JSON POST、自定义头等),浏览器会先发送 OPTIONS "预检" 检查权限 — 如果服务器响应不允许你的 origin、方法或头部,实际请求会被阻止,DevTools 中会出现 CORS 错误。

CORS 响应头部说明

Access-Control-Allow-Origin

指定允许哪个 origin。可以是单个 origin、"*"(任何),或回显请求的 origin。

Access-Control-Allow-Credentials

"true" 时浏览器发送 cookies/认证头。不能与 Allow-Origin: * 组合。

Access-Control-Allow-Methods

服务器允许的 HTTP 方法。仅在预检响应中相关。

Access-Control-Allow-Headers

服务器允许的请求头。适用于 Authorization、自定义 X-* 等非简单头部。

Access-Control-Expose-Headers

浏览器可暴露给 JavaScript 的响应头。默认仅一个短白名单。

Access-Control-Max-Age

浏览器可缓存预检结果的秒数。较大值避免重复 OPTIONS。

CORS 检查器常见问题

为什么浏览器报 CORS 错误但这个工具能显示头部?

CORS 由浏览器执行,不是服务器。本工具在我们后端运行,因此不受 CORS 规则约束 — 我们看到原始响应。你的浏览器根据 Access-Control-* 头部在客户端阻止请求。如果此处显示的头部与你的 origin/方法/头部不匹配,即使服务器有响应,浏览器也会阻止。

什么是预检 OPTIONS 请求?

对于 "非简单" 跨源请求 (除带基本头的简单 GET/HEAD/POST 之外的任何请求),浏览器先发送 OPTIONS 询问 "能否发送此请求?"。服务器以 Access-Control-Allow-Methods、Allow-Headers、Allow-Origin 响应。若允许你的实际请求,浏览器继续;否则阻止。

为什么 Access-Control-Allow-Origin: * 对我的请求不够?

如果请求包含凭据 (cookies、Authorization 头、TLS 客户端证书),浏览器拒绝 "*",要求指定 origin。服务器必须在 Access-Control-Allow-Origin 中回显你的精确 origin 并设置 Access-Control-Allow-Credentials: true。

CORS 适用于服务器到服务器的请求吗?

不。CORS 纯粹是浏览器安全特性。curl、服务端 Node fetch、Postman 或任何非浏览器客户端完全忽略 CORS。如果你在非浏览器环境看到 "CORS 错误",真正的问题在别处 (网络、认证、URL 错误)。

如何修复 CORS 错误?

在服务器侧修复,不是客户端。添加正确的 Access-Control-Allow-Origin (你的前端 origin)、Allow-Methods (你用的 GET/POST 等)、Allow-Headers (自定义或认证头)。若使用凭据,添加 Allow-Credentials: true。确保处理 OPTIONS 并返回 2xx。禁用 CORS 的浏览器扩展是开发捷径 — 切勿让真实应用依赖它们。