同源策略是浏览器的核心安全机制:协议、域名、端口三者完全相同的两个 URL 才是同源。它限制跨源的 DOM 访问(iframe)、Cookie/LocalStorage 读取、以及 AJAX 响应的读取——注意跨域请求通常是「发出了、服务器也处理了」,只是浏览器拦截了响应不给脚本,所以 CSRF 防不住「请求发生」,防的是读取与凭证携带。
常见跨域方案对比:1)CORS(标准方案)——服务器用 Access-Control-Allow-Origin 等响应头授权,浏览器放行;2)JSONP——利用 script 标签不受同源限制,只能 GET、安全性差,仅历史意义;3)反向代理——Nginx 把 /api 转发到后端,对浏览器而言始终同源,是生产环境最常用的做法;4)postMessage——iframe/窗口间受控通信;5)WebSocket——不受同源策略约束,但服务端要自己校验 Origin。追问方向:CORS 预检请求的触发条件、为什么禁止读取跨域响应但不禁止跨域写(表单提交)与超链接(导航)。
(约 400 字)