面试题库 词条目录
前端Wiki/词条/跨域与 CORS

跨域与 CORS

定义浏览器同源策略下,允许跨域请求资源的标准机制与解决方案集合

同源策略要求协议、域名、端口三者完全一致,目的是限制恶意文档读取其他源的敏感数据。跨域的正统方案是 CORS:服务端响应里带上 Access-Control-Allow-Origin 等头部,浏览器就放行。简单请求直接发送,非简单请求(如 PUT、带自定义头)会先发 OPTIONS 预检请求,这是面试最常考的细节。

除 CORS 外还要答出其他方案的适用场景:开发环境用代理转发(Vite 或 webpack 的 proxy)一劳永逸;不支持 CORS 的老系统用 JSONP(只能 GET);图片打点上报可以用空地址。回答时强调跨域限制是浏览器的行为,服务端之间互相请求不受同源策略约束。

JavaScript
// 简单请求与非简单请求(预检)的区别
// 简单请求:常见方法与 Content-Type,浏览器直接发出
fetch('https://api.example.com/list?page=1')
  .then(r => r.json())
  .then(d => console.log('简单请求拿到数据', d))
  .catch(e => console.log('服务端没带允许头时浏览器会拦截响应', e));

// 非简单请求:先发 OPTIONS 预检,通过后才有真正的请求
fetch('https://api.example.com/item', {
  method: 'PUT',
  headers: { 'X-Token': 'abc', 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'x' })
}).then(r => console.log('预检通过,真正请求已发出', r.status));
⚠ 常见误区
🔗 相关词条XSS 与 CSRF 安全从 URL 输入到页面渲染
← 返回来源章节XSS 与 CSRF 安全