无需登录 数据私有 本地保存

CORS 预检请求测试器 - 发送 OPTIONS 分析响应

10
0
0
0

CORS 预检请求测试器

发送 OPTIONS 请求,分析 CORS 响应头,诊断跨域问题

请求配置
输入要测试的 API 端点地址
模拟预检:声明即将使用的 HTTP 方法
逗号分隔,模拟预检:声明即将使用的自定义请求头
浏览器自动设置 Origin,此处仅影响 cURL 命令

输入目标 URL 并点击发送,测试 CORS 预检响应

粘贴响应头

从浏览器开发者工具 Network 标签或 cURL -v 输出中复制响应头

期望参数
生成 cURL 命令

使用 cURL 在终端中测试 CORS 预检,可完全绕过浏览器限制,获取完整响应头。

curl -X OPTIONS "https://httpbin.org/get" \ -H "Origin: https://example.com" \ -H "Access-Control-Request-Method: GET" \ -H "Access-Control-Request-Headers: Content-Type" \ -v
CORS 常见问题
什么是 CORS 预检请求(Preflight)?
预检请求是浏览器在发送某些跨域请求前,自动发出的一个 OPTIONS 请求。它的作用是向服务器确认:"我即将发送一个跨域请求,你允许吗?" 服务器通过响应头(如 Access-Control-Allow-Origin)告知浏览器是否允许该跨域操作。如果预检通过,浏览器才会发送实际的请求;如果预检失败,实际请求会被浏览器阻止。
什么情况下会触发预检请求?
并非所有跨域请求都会触发预检。简单请求(方法为 GET/HEAD/POST,Content-Type 为表单或文本,无自定义请求头)不会触发预检。以下情况会触发预检:
• 使用 PUT、DELETE、PATCH 等方法
• Content-Type 为 application/json 等非简单类型
• 携带自定义请求头(如 Authorization、X-Requested-With)
• 使用了 credentials: 'include'
Access-Control-Allow-Origin 可以设置多个值吗?
不可以。 Access-Control-Allow-Origin 只能设置一个值:要么是 *(允许所有来源),要么是一个具体的 origin(如 https://example.com)。如果需要允许多个特定来源,服务器需要动态判断请求的 Origin 头,并在响应中返回匹配的那个 origin。注意:使用 * 时不能同时设置 Access-Control-Allow-Credentials: true
如何优化预检请求的性能?
使用 Access-Control-Max-Age 响应头可以缓存预检结果。例如设置为 86400(24小时),浏览器在缓存有效期内不会重复发送预检请求。最大缓存时间因浏览器而异:Firefox 上限为 86400 秒,Chrome 上限为 7200 秒(2小时)。此外,尽量使用简单请求格式,避免触发不必要的预检。
预检请求失败如何调试?
步骤一:打开浏览器开发者工具(F12)→ Network 标签,筛选 OPTIONS 请求,查看预检请求的响应状态码和响应头。
步骤二:确认 Access-Control-Allow-Origin 是否匹配请求的 Origin。
步骤三:检查 Access-Control-Allow-Methods 是否包含实际请求的方法。
步骤四:如有自定义请求头,确认 Access-Control-Allow-Headers 包含它们。
步骤五:使用本工具的 cURL 命令在终端中复现,获取完整响应头进行排查。
OPTIONS 请求响应 200 和 204 有什么区别?
两者都可以表示预检成功。200 OK 通常会携带响应体(可能为空),而 204 No Content 明确表示没有响应体。在 CORS 预检场景中,204 更为语义化,因为预检响应通常不需要响应体。大多数服务器框架对 200 和 204 的处理在 CORS 层面没有区别,浏览器都接受。