加载中...
浏览器的同源策略限制不同源之间的资源访问,CORS(跨源资源共享)是 W3C 标准化的跨域解决方案,通过 HTTP 头协商允许指定来源的跨域请求,取代了早期 JSONP 等非标准手段。

| 同源定义 | 协议 + 域名 + 端口三者相同 |
| 标准规范 | W3C CORS(Fetch Living Standard 已接管) |
| 核心响应头 | Access-Control-Allow-Origin / Allow-Methods / Allow-Headers |
同源要求协议、域名、端口三者完全相同。跨域请求分两类:简单请求(GET/POST + 特定 Content-Type + 无自定义头)直接发送,服务端通过 Access-Control-Allow-Origin 头控制是否接受;非简单请求(PUT/DELETE、JSON body、自定义头)先发 OPTIONS 预检请求(Preflight),服务端返回允许的方法和头,通过后浏览器才发实际请求。预检结果可通过 Access-Control-Max-Age 缓存,避免每次都发两个请求。[1]
本地开发时最简单的跨域方案是在 Webpack DevServer 或 Vite 中配置 proxy,将 API 请求转发到目标服务器,浏览器看到的是同源请求,无跨域问题。生产环境中 Nginx 反向代理也是主流方案,由 Nginx 做跨域头注入而非修改业务代码。JSONP 因只支持 GET 请求、存在 XSS 风险,已基本退出历史舞台。credentials(Cookie 跨域携带)需要同时设置 withCredentials: true(请求端)和 Access-Control-Allow-Credentials: true + 非通配符的 Allow-Origin(服务端),两边缺一不可。

| 同源定义 | 协议 + 域名 + 端口三者相同 |
| 标准规范 | W3C CORS(Fetch Living Standard 已接管) |
| 核心响应头 | Access-Control-Allow-Origin / Allow-Methods / Allow-Headers |
登录 后参与讨论
暂无讨论,来发表第一条评论吧