为什么 postman 发送请求时不会有跨域问题?

大家好,我是刘布斯。

今天咱聊个面试里的“常青树”,也是很多刚入行的小兄弟最郁闷的问题:“凭什么我用 Postman 调接口死活都能通,一回到浏览器写代码就报跨域(CORS)错误?”

这个问题,我带过不少应届生,不少都得在这个坑里蹲一阵子。甚至有些工作两三年的同学,虽然知道怎么配 Access-Control-Allow-Origin,但你要问他“为什么 Postman 没这事儿”,他可能还真得愣一下。

今天咱们从“受害者”的角度聊聊,这到底是怎么一回事。

跨域,到底是“谁”在拦着你?

首先,我们要搞清楚一个最大的误区:跨域报错,从来都不是服务器拒绝了你的请求。

很多同学看到控制台那一串红字,第一反应是:“后端接口挂了”或者“后端把我拒了”。

其实不然。绝大多数情况下,你的请求已经发到了后端,后端也正常处理了,甚至已经把数据返回给你了。但是,当响应回到浏览器的一刹那,浏览器的“保安系统”跳了出来,看了一眼响应头,发现没有合法的“通行证”,反手就把数据给扣下了,顺便给你报了个红。

这个保安系统,就叫同源策略(Same-Origin Policy)

为什么浏览器要当这个“恶人”?

因为浏览器是极其复杂的公共环境。你可能同时开着你的银行页面,又开着一个不知名的“钓鱼网站”。

如果没有同源策略,钓鱼网站里的 JS 脚本就能轻而易举地向银行接口发请求(带上你的 Cookie),把你账户里的余额看个精光。

所以,浏览器必须得怂,必须得严格。它是为了保护用户(你)的安全,才去限制 JS 脚本的越权行为。

那 Postman 为什么能“法外施恩”?

Postman 也是个软件,它也要发网络请求,凭啥它就没跨域问题?

其实道理简单得让你想拍大腿:Postman 不是浏览器,它不需要遵循浏览器的“同源策略”。

  1. 它没有“源(Origin)”的概念:浏览器里的请求是从某个特定的域名(比如 a.com)发往另一个域名(b.com)。而 Postman 是一个独立的客户端软件。当你点下“Send”键时,它是直接通过操作系统的网络栈发出的请求,就像你写的 Python 脚本或者 cURL 命令一样。
  2. 它是“上帝视角”:Postman 的本质是一个模拟请求工具。它不需要保护什么“用户隐私”,它唯一的任务就是把你想发的东西发出去,把对方回的东西拿回来。它不需要像浏览器那样为了安全把自己关进“沙盒(Sandbox)”里。
  3. Electron 的特殊权限:虽然现在的 Postman 桌面端也是基于 Electron(本质是个魔改浏览器)开发的,但它在底层通过 Node.js 或者原生插件绕过了所有的安全限制。它不是在网页里跑 JS,它是在你的系统里跑程序。

面试里的“送命题”:Postman 通了,说明后端没问题?

这是我面试喜欢考的一道题。

我问: “如果 Postman 能通,浏览器报跨域,是不是说明后端代码逻辑是完全正确的?”

新手回答: “对啊,Postman 都拿到数据了,说明接口没问题。”

老鸟回答: “不一定。虽然逻辑通了,但说明后端没有配置跨域策略(或者配错了)。在现代 Web 开发里,‘支持跨域’本身就是接口逻辑的一部分。”

你要记住,既然浏览器需要 Access-Control-Allow-Origin 这个头,那后端就得配合给。Postman 能通,是因为它“不看”这个头;浏览器不通,是因为它“必看”这个头。后端如果不给这个头,那这个接口对于前端开发来说,就是“没写完”的。

踩坑经验:别被 Postman 给骗了

之前,有个小兄弟跟我争得面红耳赤。

他写了个 DELETE 请求,Postman 删数据删得飞快,结果一上页面就报错,连请求都没发出去(其实是发了,但是 OPTIONS 请求挂了)。

他跟我抱怨:“我在 Postman 中试过了,真的没问题!”

我当时就笑了,告诉他两个真相:

  1. 预检请求(Preflight Request):浏览器在发某些“复杂请求”(比如 PUTDELETE 或者带自定义 Header 的 POST)之前,会先发一个 OPTIONS 探测请求。Postman 默认是不发这玩意的。如果后端没处理 OPTIONS,浏览器就直接歇菜,但 Postman 依然跑得欢。
  2. Cookie 的锅:浏览器会自动带上对应域名的 Cookie,而 Postman 除非你手动设,否则它是干净的。有时候跨域问题还伴随着 withCredentials 的设置问题,这也是 Postman 模拟不出来的。

总结一句话:Postman 只能证明你的“业务逻辑”通了,不能证明你的“网络策略”通了。

说在最后:关于刷题和实战

跨域这事儿,说深不深,说浅也不浅。面试官考你,其实是在考你对浏览器安全模型的理解。

聊到这儿,我也再给正在备战面试或者想提升功底的兄弟们,安利一下我们的前端面试题库:https://fe.ecool.fun/ 和配套的小程序【前端面试题宝典】。

题库已经录入 1600 多道前端面试题,除了八股文,还有现在面试官青睐的场景题,甚至最热的AI与前端相关的面试题已经更新,努力做全网最全最新的前端刷题网站。

有会员购买、辅导咨询的需求,可以通过下面的二维码,联系我们的小助手。

行了,今天就聊到这。下次遇到跨域红字,别再只盯着后端看,也想想那个正在保护你的浏览器“保安”吧。