标准答案
- 同源由协议、主机和端口共同决定。浏览器脚本跨源读取响应时会受到同源策略限制,普通服务端到服务端请求不受浏览器 CORS 限制。
- 简单请求会直接发送并由浏览器根据响应头决定是否把结果交给脚本;带自定义 Header、非简单方法或特定 Content-Type 的请求通常先发送预检 OPTIONS。
- 服务端应按可信前端来源精确返回 Access-Control-Allow-Origin、允许方法、允许 Header 和预检缓存时间。
- 使用 Cookie 或其他凭据时,不能把允许来源设为通配符,还要显式允许凭据并评估跨站 Cookie 策略。
- 任何客户端都可以绕开浏览器直接发 HTTP 请求,因此服务端仍必须独立完成认证、授权、输入校验和限流。
题目解析
CORS 配错常表现为浏览器控制台报错,但服务器可能已经收到并处理了请求。对有副作用的简单请求,不能把 CORS 当成阻止攻击的安全边界。
动态回显 Origin 前必须校验白名单,不能把请求头中的任意 Origin 原样回写。
常见误区
- 认为 CORS 能阻止恶意服务端或脚本直接调用 API。
- 为了解决开发跨域直接允许所有来源和所有凭据。
- 忘记处理预检请求所需的方法、Header 和缓存配置。