Chrome 跨域问题解决方案
跨域问题是 Web 开发中常见的问题,Chrome 浏览器提供了多种解决方案。
跨域产生原因
浏览器的同源策略限制了不同源之间的资源访问,源由协议、域名和端口决定。
解决方案
-
CORS(跨域资源共享)
- 服务器设置 Access-Control-Allow-Origin 头
- 支持简单请求和预检请求
- 可以指定允许的 HTTP 方法和头部
-
JSONP(JSON with Padding)
- 利用 script 标签不受同源策略限制
- 只支持 GET 请求
- 需要服务器配合
-
代理服务器
- 使用同源服务器作为代理
- 代理服务器转发请求到目标服务器
- 开发环境常用 webpack devServer 代理
-
PostMessage
- 用于不同窗口之间的通信
- 支持跨域 iframe 通信
- 需要明确指定消息来源
-
WebSocket
- WebSocket 不受同源策略限制
- 适用于实时通信场景
- 需要服务器支持
开发环境配置
- Chrome 启动时添加 --disable-web-security 参数(仅用于开发)
- 使用 CORS 插件(仅用于开发)
- 配置 webpack devServer 代理
最佳实践
- 生产环境使用 CORS
- 敏感操作需要额外的安全验证
- 避免使用 JSONP,存在安全风险
- 合理设置 CORS 头,避免过度开放