上一篇
"老张,我前端调用后端接口怎么老是报跨域错误啊?"小王挠着头一脸困惑,这种场景在前端开发中太常见了——明明本地测试好好的,一对接就各种跨域报错,今天咱们就来彻底搞懂这个让无数前端开发者头疼的跨域问题。
当你的网页在https://www.a.com
,却要去请求https://api.b.com
的数据时,浏览器就会跳出来说:"不行!这违反了同源策略!"这就是跨域问题。
同源策略要求三个一致:
哪怕只是http
和https
的区别,或者www.a.com
和a.com
的差别,甚至是同一个域名下3000
端口和8080
端口的区别,都会被浏览器视为不同源。
CORS(跨域资源共享)是目前最推荐的解决方案,后端同学加几个响应头就能搞定:
// Node.js Express示例 app.use((req, res, next) => { res.header("Access-Control-Allow-Origin", "*"); // 允许所有域名 res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); res.header("Access-Control-Allow-Headers", "Content-Type, Authorization"); next(); });
常见坑点:
虽然现在用得少了,但在某些特殊场景下还是能派上用场:
function handleResponse(data) { console.log('收到数据:', data); } const script = document.createElement('script'); script.src = 'https://api.b.com/data?callback=handleResponse'; document.body.appendChild(script);
致命缺点:
在本地开发时,webpack-dev-server可以轻松配置代理:
// vue.config.js module.exports = { devServer: { proxy: { '/api': { target: 'https://api.b.com', changeOrigin: true, pathRewrite: { '^/api': '' } } } } }
适用场景:
server { listen 80; server_name mydomain.com; location /api/ { proxy_pass https://api.b.com/; add_header 'Access-Control-Allow-Origin' '*'; } }
优势:
const socket = new WebSocket('wss://api.b.com'); socket.onopen = () => { socket.send('Hello Server!'); }; socket.onmessage = (event) => { console.log('收到消息:', event.data); };
适用场景:
症状:明明设置了withCredentials
,cookie还是丢失
解法:
// 前端 axios.defaults.withCredentials = true; // 后端 res.header("Access-Control-Allow-Credentials", "true"); res.header("Access-Control-Allow-Origin", "https://your-frontend-domain.com"); // 必须明确指定域名
症状:控制台报OPTIONS 404或405错误
解法:
// Express中间件 app.options('*', (req, res) => { res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); res.status(204).send(); });
症状:控制台报has been blocked by CORS policy
错误
可能原因:
Access-Control-Allow-Headers
中的自定义头Access-Control-Allow-Origin: *
,特别是对敏感接口Access-Control-Max-Age
减少预检请求根据2025年8月的最新浏览器支持情况:
Partitioned
属性,可以更细粒度控制跨域资源Origin-Isolation
标头提供了更强的隔离机制跨域问题就像前端的"必修课",看似简单实则暗藏玄机,掌握了这些方法,下次再遇到跨域报错,你就能淡定地说:"小样,看我怎么收拾你!"没有最好的跨域方案,只有最适合当前场景的解决方案。
本文由 潜天华 于2025-08-01发表在【云服务器提供商】,文中图片由(潜天华)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/503943.html
发表评论