上一篇
"昨天还好好的,怎么今天接口就报错了?" 小张盯着浏览器控制台的红色报错一脸懵。
Access to XMLHttpRequest at 'http://api.example.com/data' from origin 'http://localhost:8080'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
这种场景前端开发者再熟悉不过了——跨域问题又双叒叕来了!今天我们就来彻底搞懂这个磨人的"小妖精"。
跨域问题本质是浏览器的安全策略(同源策略)在作祟,当你的前端页面(比如http://localhost:8080
)尝试请求不同源的接口(比如http://api.example.com
),浏览器就会拦截这个请求。
同源三要素必须完全相同:
只要有一个不同,就是跨域!常见的跨域场景包括:
在vue.config.js
中配置:
module.exports = { devServer: { proxy: { '/api': { target: 'http://real.api.com', // 真实接口地址 changeOrigin: true, pathRewrite: { '^/api': '' // 去掉请求路径中的/api } } } } }
这样,前端请求/api/users
会被代理到http://real.api.com/users
让后端同学在响应头中添加:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,POST,PUT,DELETE
Access-Control-Allow-Headers: Content-Type
只适用于GET请求:
function jsonp(url, callbackName) { const script = document.createElement('script') script.src = `${url}?callback=${callbackName}` document.body.appendChild(script) } // 后端需要返回类似 callbackName({data:...}) 的格式
/api
但实际请求/v1/api
)当发送复杂请求(如带自定义头部的POST请求)时,浏览器会先发OPTIONS请求,此时需要:
Access-Control-Allow-Headers
开发时好好的,上线后报错?可能是:
chrome.exe --disable-web-security
跨域不是bug,而是浏览器保护我们的机制,记住三个关键点:
下次再遇到跨域问题,不妨把这篇文章当检查清单用,如果你发现同事也在为跨域抓狂,不妨把文章分享给他——拯救一个程序员,少掉一根头发!
(本文技术要点更新至2025年7月)
本文由 考清婉 于2025-07-31发表在【云服务器提供商】,文中图片由(考清婉)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/494532.html
发表评论