深度拆解“简单请求”和“复杂请求”的跨域表现

以下从本质区别、触发条件、交互流程、实际示例四个维度,深度拆解“简单请求”和“复杂请求”的跨域表现,帮你彻底理清浏览器的跨域拦截逻辑:


一、核心本质:浏览器如何区分“简单”与“复杂”?

浏览器判定规则的核心是 “是否超出基础请求范围”

  • 简单请求:符合所有浏览器预设的“安全基线”,无需额外校验即可发送。
  • 复杂请求:因方法、头信息、内容类型等超出安全基线,需先“问 permission”(预检请求),再决定是否发主请求。

二、详细判定条件(RFC 标准)

1. 简单请求需同时满足 3 个条件

(1)请求方法:只能是 GETPOSTHEAD 三者之一。
(2)自定义请求头:不能有任何自定义头(如 token: xxxuser-agent: custom 都不行),只能用浏览器默认的头(如 Content-TypeAcceptCookie 等)。
(3)Content-Type 限制:仅允许以下三种之一:

  • application/x-www-form-urlencoded(普通表单提交)
  • multipart/form-data(文件上传表单)
  • text/plain(纯文本)
2. 复杂请求的触发条件

只要不满足“简单请求”的任意一条,就会触发复杂请求:

  • 用了 PUTDELETEPATCH 等“非简单方法”
  • 加了自定义请求头(如 Authorization: Bearer xxx
  • Content-Typeapplication/json(最常见的场景!)
  • 发送 ArrayBufferBlob 等特殊数据类型

三、交互流程对比(附时序图)

1. 简单请求的跨域流程

特点:直接发请求 → 服务器给响应 → 浏览器“事后拦截”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值