CORS 详解
跨源资源共享完整指南——工作原理、每个请求头详解以及常见错误与修复方法。
概述
什么是CORS?
跨源资源共享(CORS)是一种基于HTTP头部的机制,允许服务器指示除其自身之外的任何来源(域名、协议或端口),浏览器应允许从这些来源加载资源。浏览器默认执行同源策略,该策略阻止网页向与提供该页面的来源不同的来源发出请求。
同源策略
如果两个URL共享相同的协议(http/https)、主机和端口,则它们具有相同的来源。例如,https://app.example.com和https://api.example.com是不同的来源,因为主机不同。同源策略防止恶意网站读取另一个网站的敏感数据——CORS是以受控方式放宽此限制的机制。
简单请求 vs. 预检
“简单请求”使用GET、HEAD或POST,仅包含CORS安全列表中的头部,不会触发预检。所有其他跨源请求——使用PUT或DELETE等方法,或包含Authorization等头部的请求——会触发预检:浏览器先发送OPTIONS请求向服务器请求权限,然后才发送实际请求。
CORS 工作原理
简单请求
浏览器
GET /api/data
Origin: https://app.example.com
Origin: https://app.example.com
↓
服务器
200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: *
↓
✓ 响应共享给 JS
预检请求
浏览器
OPTIONS /api/data
Access-Control-Request-Method: DELETE
Access-Control-Request-Method: DELETE
↓
服务器
204 No Content
Access-Control-Allow-Methods: DELETE
Access-Control-Allow-Methods: DELETE
↓
浏览器
DELETE /api/data
Origin: https://app.example.com
Origin: https://app.example.com
↓
✓ 响应共享给 JS
CORS 请求头
显示 10/10
常见错误
显示 8/8