Skip to content

CORS 与跨域:同源策略、预检、凭证模式与缓存影响

主题定位

跨域问题不是请求发不出去,而是浏览器限制脚本读取非同源响应。

  • 跨域问题不是请求发不出去,而是浏览器限制脚本读取非同源响应
  • 跨域问题本质上是浏览器同源策略限制脚本读取非同源响应,而不是网络层根本发不出请求
  • CORS 是服务端通过响应头显式授权浏览器:哪些源、哪些方法、哪些头、是否允许凭证,可以暴露给前端脚本
  • 后端返回 200 并不代表前端就能拿到数据;如果 CORS 头不对,浏览器仍会拦截响应暴露

关键概念拆分

对象一

对象一 先看职责边界,再看生命周期、数据形态和与其他对象的协作关系。 对象一 的差异最终会体现在 协议语义、连接代价、失败恢复 这几个维度。 对象一 讲清适用边界、失效条件和代价结构,结论才有技术含量。

对象二

对象二 先看职责边界,再看生命周期、数据形态和与其他对象的协作关系。 对象二 的差异最终会体现在 协议语义、连接代价、失败恢复 这几个维度。 对象二 讲清适用边界、失效条件和代价结构,结论才有技术含量。

差异对照与适用场景

  • 跨域问题不是请求发不出去,而是浏览器限制脚本读取非同源响应
  • 跨域问题本质上是浏览器同源策略限制脚本读取非同源响应,而不是网络层根本发不出请求
  • CORS 是服务端通过响应头显式授权浏览器:哪些源、哪些方法、哪些头、是否允许凭证,可以暴露给前端脚本
  • 后端返回 200 并不代表前端就能拿到数据;如果 CORS 头不对,浏览器仍会拦截响应暴露
  • 简单请求满足方法、头部和内容类型约束时,浏览器可直接发真实请求,再根据响应头决定结果是否可被脚本读取
  • 非简单请求会先发预检 OPTIONS,请求头里的 Access-Control-Request-Method 和 Access-Control-Request-Headers 告诉服务端后续真实请求意图

工程建议与边界

  • 跨域问题不是请求发不出去,而是浏览器限制脚本读取非同源响应
  • 跨域问题本质上是浏览器同源策略限制脚本读取非同源响应,而不是网络层根本发不出请求
  • CORS 是服务端通过响应头显式授权浏览器:哪些源、哪些方法、哪些头、是否允许凭证,可以暴露给前端脚本
  • 后端返回 200 并不代表前端就能拿到数据;如果 CORS 头不对,浏览器仍会拦截响应暴露
  • 简单请求满足方法、头部和内容类型约束时,浏览器可直接发真实请求,再根据响应头决定结果是否可被脚本读取

问答设计及延伸

标准回答

回答 CORS 与跨域:同源策略、预检、凭证模式与缓存影响 时,先定义 对象一、对象二 各自解决的问题,再比较它们在 协议语义、连接代价、失败恢复 上的差异,最后给出选型边界和工程代价。

追问拆解

  • CORS 与跨域:同源策略、预检、凭证模式与缓存影响 与“认证模型:Session、Cookie、Token 与前端存储边界”的边界关系
  • CORS 与跨域:同源策略、预检、凭证模式与缓存影响 与“CDN、浏览器缓存与发布治理:版本化、回滚与缓存失配”的边界关系
  • CORS 与跨域:同源策略、预检、凭证模式与缓存影响 与“浏览器多进程架构:Browser Process、Renderer、GPU 与站点隔离”的边界关系
  • 跨标签页、跨域、多端协作场景下的结论变化
  • 维护成本上升后的优先级调整

容易失分的点

  • 只给“哪个好”的结论,不先拆对象
  • 只报 API 或术语,不解释运行时行为和代价
  • 缺少真实场景,导致结论过度绝对

项目映射

  • 结合真实系统说明 对象一 到 对象二 分别落在哪段链路
  • 补充未选方案的放弃原因和约束差异
  • 补充线上问题、治理动作和验证结果

相关主题