当前位置:首页 > 百科 > 前端怎么解决跨域问题

前端怎么解决跨域问题

2026-10-17 05:47:37 [休闲] 来源:力不从心网

跨域问题本质上是前端浏览器的一种安全策略,叫同源策略。解决它规定:只有协议、跨域域名、问题端口完全一致的前端页面之间,才能自由读写资源。解决这策略本身没错,跨域但实际开发中,问题前端要调后端接口,前端后端在A服务器,解决前端页面在B服务器,跨域端口还不一样——跨域就这么发生了。问题

我见过不少刚入行的前端同事,一遇到跨域就慌,解决第一反应是跨域“关掉浏览器安全设置”。这法子治标不治本,用户那边可不会帮你关。真正靠谱的方案,得从请求链路上去想。

最简单的场景,后端接口是你自己团队的。那直接让后端在响应头里加一行Access-Control-Allow-Origin: *,或者指定你的前端域名。这叫CORS,跨域资源共享。浏览器发现响应头里有这个字段,就放行了。注意,如果请求带了自定义头或者用了Content-Type: application/json,浏览器会先发一个OPTIONS预检请求,后端得把这个也处理掉,否则照样报错。这个细节坑过很多人,我调过的接口里,十有八九是忘了处理预检。

但后端接口不在你手里呢?比如你接的是第三方开放平台。这时候可以走代理。开发环境下,用webpack的devServer配个proxy,把/api开头的请求转发到目标服务器。浏览器只跟你的devServer通信,同源,不跨。生产环境更简单,让Nginx配一条反向代理规则,把特定路径转发到上游接口。这种方式的好处是前端代码完全不用动,改改配置就行。

还有一种老派但有效的办法——JSONP。原理是利用<script>标签不受同源策略限制的特性,动态创建一个script标签,src指向带callback=xxx参数的接口地址。后端返回的是一段JavaScript代码,把数据塞进xxx(data)这个函数调用里。前端提前定义好xxx函数,数据就到了。但这方案有个硬伤:只支持GET请求。现在RESTful接口动不动就POST、PUT,所以JSONP基本退居二线了,除非你在维护老系统。

再提一个容易忽略的点——document.domain。这招只在主域相同的情况下管用,比如a.example.com和b.example.com,两边都设置document.domain = 'example.com',就能互相访问了。但它解决不了端口不同的问题,局限性很大,我工作这么久,实际用到的次数一只手数得过来。

说到个人经验,我强烈建议团队在项目初期就定好跨域方案,别等联调时才手忙脚乱。如果你前后端都是自己人,直接上CORS,后端加个配置类,一劳永逸。如果你控制不了后端,老老实实用Nginx或Node中间层做代理。最忌讳的是前端代码里写死某个跨域接口地址,然后临时用浏览器插件糊弄过去——这种代码一旦上线,必炸。

另外,跨域不只是“调不通”那么简单。有时候请求发出去了,后端也处理了,但浏览器把响应拦了,前端拿不到数据。这种情况排查起来最费劲,因为后端日志显示一切正常。解决办法是看浏览器Network面板里的响应信息,如果CORS头缺失,后端补上就行。

最后说个冷门但实用的场景——本地开发调试线上接口。你本地起的服务是localhost:8080,线上接口是https://api.example.com,这必然跨域。别慌,用CORS代理服务,比如https://cors-anywhere.herokuapp.com/这类,把接口地址拼在后面,代理帮你转发。当然,生产环境千万别这么干,这玩意儿只适合临时调试。

跨域不是玄学,是浏览器定下的规矩。你顺着它的规则走,要么让后端点头(CORS),要么绕道走(代理),要么利用漏洞(JSONP)。选哪种,取决于你对后端代码的控制力。记住一条:别想着绕过浏览器,那只会让你陷入更深的坑。

(责任编辑:休闲)

推荐文章
  • burp工具

    burp工具 Burp Suite这玩意儿,说白了就是给HTTP流量做手术的一把刀。我见过太多新手打开它,盯着那一排英文标签发愣,然后默默关掉去用那些“一键扫描”的国产工具——这简直是暴殄天物。 你真正该盯住的是那 ...[详细]
  • 下列选项中不具有漏洞扫描功能的是

    下列选项中不具有漏洞扫描功能的是 下列选项中不具有漏洞扫描功能的是——我见过最离谱的答案是“人工审计”。但真正让我愣住的,是某次安全培训上,讲师把“防火墙”也列了进去。台下有人举手:“防火墙不是能拦截攻击吗?”讲师反问:“拦截和扫描是 ...[详细]
  • 黑猫视频第一搬运

    黑猫视频第一搬运 凌晨两点,我盯着B站后台的播放曲线发呆。那条线从晚上十点开始陡峭上升,到十二点达到顶峰,然后像被砍断的树枝一样垂直坠落。评论区里吵成一锅粥,有人说“这画质糊得亲妈都认不出来”,有人刷“搬运狗滚出克”, ...[详细]
  • SEM对SEO的影响

    SEM对SEO的影响 三年前我接手了一个半死不活的B2B网站,SEO月访问量卡在八千上下,广告费倒是烧得厉害。老板咬着牙说再投三个月,不行就转纯付费流量。我没急着调关键词,先干了一件事:把SEM账户里转化率最高的那两百个词 ...[详细]
  • 网站优化技术

    网站优化技术 网站优化技术,说白了就是跟搜索引擎“对暗号”。我见过太多人一上来就堆砌关键词,把页面塞得跟春运火车似的,结果百度根本不买账。真正有用的优化,是让技术细节替你的内容说话。 拿我去年改版的一个电商站来说, ...[详细]
  • 网址搜索栏

    网址搜索栏 我盯着那个地址栏看了大概十秒钟,光标一闪一闪的,像一只等着喂食的鱼。刚才输入了半截网址,手一抖按了删除键,又全没了。这已经是今天第三次重复这个动作了——我不是记不清那个网站,而是突然觉得,这方寸之间的 ...[详细]
  • 国外监测网站

    国外监测网站 打开浏览器,敲下“liveuamap”或者“israelpalestinemap”这类网址,屏幕上立刻铺开一张布满红点、蓝点和闪烁图标的地图。这就是国外监测网站最直观的形态——一个把战火、灾害、抗议活 ...[详细]
  • Web语言

    Web语言 浏览器地址栏里敲下一串字符,按下回车。这个动作每天重复几十亿次,但很少有人意识到,你刚刚完成了一次翻译——把人类意图翻译给机器听的翻译。而负责这门翻译的语言,就是Web语言。 我常觉得HTML像极了乐 ...[详细]
  • 黑盒测试实例

    黑盒测试实例 测试部的老张把一包恰恰香瓜子倒进键盘缝隙,又用力拍了拍机箱。这是他本周第三次试图用物理方式制造故障——前两次分别用了咖啡和橡皮屑。结果呢?系统稳如老狗,连个报错弹窗都不给。老张骂骂咧咧地擦键盘时,我忽 ...[详细]
  • payload解包工具下载

    payload解包工具下载 GitHub上有个项目叫PayloadsAllTheThings,star数快破万了,但很多人不知道它真正的用法——不是给你抄payload,而是让你理解每个payload背后的逻辑。今天不谈那个, ...[详细]
热点阅读