简单请求无需预检,只需后端返回access-control-allow-origin等响应头即可;其条件是方法为get/head/post且请求头仅含安全字段;前端默认行为足够,携带凭证时需设credentials: 'include'并确保后端配合。

处理简单的跨域请求,核心是让后端在响应中正确返回 Access-Control-Allow-Origin 头,前端保持标准请求方式即可。浏览器不会发预检(OPTIONS),所以配置轻量、见效快。
什么是简单请求
满足以下两个条件的请求才属于“简单请求”,才会跳过预检:
- 请求方法是 GET、HEAD 或 POST 之一
- 请求头仅包含安全字段,如
Accept、Content-Type(且值仅限application/x-www-form-urlencoded、multipart/form-data、text/plain)
例如:fetch('/api/user', { method: 'GET' }) 或 fetch('/api/login', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }) 都属于简单请求。
后端必须返回的关键响应头
只要服务端对这类请求的响应中包含以下至少一个头,浏览器就会放行:
-
Access-Control-Allow-Origin:必需。可设为具体源(如https://myapp.com)或通配符*(注意:*不能与凭证共存) -
Access-Control-Allow-Credentials(可选):若前端设置了credentials: 'include',此头必须为true,且Access-Control-Allow-Origin不能是*,必须写明完整源 -
Access-Control-Expose-Headers(可选):若需 JS 读取自定义响应头(如X-Request-ID),需在此列出
常见后端配置示例
Express(Node.js):
app.get('/api/data', (req, res) => {
res.header('Access-Control-Allow-Origin', 'https://myapp.com');
res.header('Access-Control-Allow-Credentials', 'true');
res.json({ ok: true });
});
Python http.server(简易调试):
self.send_header('Access-Control-Allow-Origin', 'http://localhost:5173')
self.send_header('Access-Control-Allow-Credentials', 'true')
PHP:
header('Access-Control-Allow-Origin: https://myapp.com');
header('Access-Control-Allow-Credentials: true');
前端注意事项
- 无需额外设置
mode或credentials—— 默认行为已足够 - 如果需要携带 cookie 或认证信息,显式加
credentials: 'include',但必须确保后端配合返回对应头 - 避免本地双击打开 HTML 文件(
file://协议),此时 Origin 为空,多数浏览器拒绝*匹配,建议用本地服务器启动(如npx serve)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











