news 2026/10/5 3:32:01

同源策略与跨域:CORS、JSONP与代理方案全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
同源策略与跨域:CORS、JSONP与代理方案全解析

同源策略与跨域,这俩词但凡做过前后端分离开发的人都绕不开。你兴高采烈地调接口,浏览器一盆冷水浇下来:“No 'Access-Control-Allow-Origin' header is present”,那一刻的绝望,我懂。这篇就聊聊同源策略到底是怎么一回事,CORS、JSONP、代理转发这些跨域方案分别解决什么问题,以及我在实际项目里踩过的那些坑。不管你是刚入门的前端,还是被跨域问题找上门的后端,这篇应该都能给你点实在的东西。

1. 同源策略到底在保护谁

要搞懂跨域,得先搞懂为什么会有跨域这回事。浏览器从诞生那天起,就面临一个安全悖论:它既要帮你从互联网上加载各种资源,又得防止恶意网站偷走你的数据。同源策略就是浏览器为了平衡这个矛盾定下的规矩。

1.1 同源的判断规则

同源,指协议、域名、端口三者完全一致。注意是“完全一致”,任何一个不同都算跨域。

页面地址请求地址是否同源原因
https://a.com/pagehttps://a.com/api同源协议域名端口全一致
https://a.com/pagehttp://a.com/api跨域协议不同(https vs http)
https://a.com/pagehttps://b.com/api跨域域名不同
https://a.com/pagehttps://a.com:8443/api跨域端口不同

这里有个容易忽略的点:默认端口可以省略。https 默认 443,http 默认 80,所以 https://a.com 和 https://a.com:443 是同一个源。但如果你把接口跑在 8080、3000 这种端口上,跟默认端口一比,就算跨域。

还有更隐蔽的情况:一级域名相同不代表同源。比如 a.example.com 和 b.example.com,看着像一家人,但浏览器判定它们是不同的源。想让它俩互通,要么改 document.domain(有严格限制,现在基本不推荐用),要么在后端配置 CORS,要么用代理。这个在后面章节详细展开。

1.2 浏览器到底拦截了什么

这是整个同源策略里最值得琢磨的一点。很多人以为同源策略是服务器在拦截,其实不是。请求该发出去的还是发出去了,服务器该处理的也处理了,响应也正常返回了,是浏览器在拿到响应之后,发现这个响应来自一个不同源的地址,而响应头里又没有允许跨域的声明,于是浏览器把响应“扣下”了,不交给页面里的 JavaScript 代码。

用大白话说:服务器根本不认识你这个浏览器是谁,它是无状态的。浏览器作为中间人,替你把关,发现页面和接口不同源,就把响应体藏起来了,然后在控制台给你报一个 CORS 错误。

理解了这一点,你就明白一个经典现象:直接用 curl 或者 Postman 去请求那个接口,响应是正常的,一点跨域错误都没有。因为 curl 不是浏览器,它没有强制执行同源策略。同源策略是浏览器层面的安全机制,不是服务器的,也不是 HTTP 协议的。前几年我在一个项目里排查问题,后端同事一口咬定接口没问题,非说是我们前端调错了,我让他用 curl 试了一下,接口确实通。但浏览器就是报跨域。原因就是上面说的,服务器不知道请求来自哪个页面,真正做拦截的是浏览器。这个“锅”到底算谁的,得从架构层面看,而不能只看接口本身通不通。

同源策略也不是什么都拦。拿 、

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 3:32:01

鸿蒙Canvas文字对齐全解析:从基线原理到公式混排实践

总有开发朋友在群里问我:鸿蒙上Canvas画文字怎么就是对不齐?x、y坐标都传了,字体也设置了,写出来的字要么偏上、要么偏下、要么整体往一边歪。这问题我前前后后排查过不少次,从一开始靠肉眼一点一点试偏移,…

作者头像 李华
网站建设 2026/10/5 3:31:40

专精特新小巨人名单数据处理:从PDF解析到Excel清洗与报告生成

最近几年做产业调研,总绕不开一份名单:国家级专精特新“小巨人”企业,从2019年第一批开始积累到2025年第七批,累计公示数量大概1.94万家。我经常在同事的桌面、客户的共享盘、行业社群的附件里看到它的痕迹,但绝大多数…

作者头像 李华
网站建设 2026/10/5 3:31:21

PX4飞控神经网络控制实战:从SITL仿真到嵌入式部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/5 3:31:19

SAP F.27客户对账单打印全解析:从输出控制到Smart Forms空白页排查

做 FICO 这么多年,如果让我挑一个"看着不起眼、用起来全是坑"的事务码,F.27 绝对能排进前三。很多刚接触 SAP 的顾问和业务用户,第一次打开 F.27 时都会愣一下:界面这么朴素,填几个公司代码、客户、日期&…

作者头像 李华
网站建设 2026/10/5 3:30:37

压力测试实战指南:从压测工具选型到MySQL性能调优

压力测试这个词,这两年被搜得越来越频繁。前阵子我帮朋友一个电商活动页做压测,活动还没上线,压测直接压出了三次数据库连接池爆掉、一次慢查询拖着整个接口超过10秒。好在问题都出在预发环境,没有酿成线上事故。从那之后我意识到…

作者头像 李华
网站建设 2026/10/5 3:30:36

HP Z系列工作站BIOS设置全攻略:Z228-Z840虚拟化、内存与固件

简介:面向HP多系列工作站的BIOS设置详解文档,覆盖Z228、Z440、Z230、Z640、Z840、Z800、Z620、Z420、Z820等机型,适合IT管理员、运维工程师及需要自行维护底层配置的进阶用户。全部内容集中在1个docx格式文件内,大小约572KB&#…

作者头像 李华