1. 为什么Postman不受跨域限制?
这个问题困扰过无数开发者:明明在Postman里测试得好好的接口,一到浏览器就报跨域错误。要理解这个现象,我们需要从底层机制说起。
1.1 跨域问题的本质
跨域问题本质上是一个浏览器安全机制,而不是HTTP协议本身的限制。它的全称是Cross-Origin Resource Sharing(跨域资源共享,简称CORS),是同源策略(Same-Origin Policy)的一种补充机制。
同源策略规定:只有当协议、域名和端口完全一致时,才允许一个网页访问另一个网页的资源。
这个策略的存在意义重大:
- 防止恶意网站窃取用户在其他网站的敏感数据(如cookie、localStorage)
- 限制跨站请求伪造(CSRF)攻击
- 保护用户隐私和安全
1.2 Postman的特殊身份
Postman作为一个独立的HTTP客户端工具,具有以下特点:
- 它不是浏览器,不运行在浏览器沙箱环境中
- 它使用自己的网络栈(基于Electron或原生网络库)
- 它不会执行JavaScript,也不受同源策略约束
- 它不会自动添加Origin头(除非你手动设置)
这些特性决定了Postman可以绕过浏览器的安全限制,直接与服务器通信。服务器收到请求后,也无法区分这个请求是来自Postman还是其他客户端。
1.3 技术实现对比
让我们用一个表格对比浏览器和Postman的行为差异:
| 行为特征 | 浏览器 | Postman |
|---|---|---|
| 同源策略检查 | 强制 | 无 |
| CORS预检请求 | 自动发送OPTIONS | 不发送(除非手动) |
| Origin头 | 自动添加 | 不添加(除非手动) |
| 响应头检查 | 严格检查Access-Control-* | 不检查 |
| 错误处理 | 拦截并报错 | 显示原始响应 |
| 凭证处理 | 受CORS限制 | 无限制 |
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 浏览器如何处理跨域请求
2.1 简单请求与非简单请求
浏览器将跨域请求分为两类:
-
简单请求(Simple Request):
- 方法:GET、HEAD、POST
- 头部:仅限Accept、Accept-Language、Content-Language、Content-Type
- Content-Type:仅限text/plain、multipart/form-data、application/x-www-form-urlencoded
-
非简单请求(Preflighted Request):
- 使用PUT、DELETE等方法
- 包含自定义头部
