OPTIONS 预检请求

OPTIONS 预检请求

什么是 OPTIONS 预检请求?

预检请求是浏览器在发送某些跨域请求之前,会发送一个 OPTIONS 请求,目的是为了确认服务器是否允许该跨域请求。

什么情况下会触发预检请求?

1. 发送非简单请求时

简单请求包括 GETHEADPOST,因此,当发送除了这三个方法之外的请求时,例如 PUTDELETEPATCH,浏览器会先发送一个 OPTIONS 请求,询问服务器是否允许该请求。

2. Content-Type 为 application/json 时

Content-Typeapplication/json 时也会触发遇见请求, 而值为 application/x-www-form-urlencodedmultipart/form-datatext/plain时则不会触发预检请求。

3. 当存在自定义请求头时

当请求头中存在自定义请求头时或者在标准请求头中设置非标准内容时,也会触发预检请求。

OPTIONS 预检请求流程

OPTIONS 请求会包含一下头部信息:

  • Origin:请求来源的域名
  • Access-Control-Request-Method: 实际请求所使用的 HTTP 方法
  • Access-Control-Request-Headers:实际请求所携带的自定义请求头

服务器需要在响应头中返回一些 CORS 相关的头部信息,例如:

  • Access-Control-Allow-Origin:允许跨域请求的域名
  • Access-Control-Allow-Methods:允许跨域请求的方法
  • Access-Control-Allow-Headers:允许跨域请求的自定义请求头

如果 HTTP 请求满足服务器返回的响应头中的信息, 即服务器允许当前请求的跨域访问,那么浏览器才会发送实际的 HTTP 请求。否则,浏览器会拒绝该请求,并在控制台中输出报错信息。

预检请求的缓存

预检请求并不会每次都发生,是因为浏览器会对预检请求进行缓存,服务器通过设置 Access-Control-Max-Age 来指定预检请求的缓存时间。

如果设置为 86400,指 24 小时内不再预检。

如果设置为 -1,则表示不缓存,每次请求前都会发送预检请求。

相关推荐
xiaoshuaishuai83 分钟前
C# AvaloniaUI 资源找不到报错
java·服务器·前端·windows·c#
How_doyou_do13 分钟前
26字节工程营-前端-自我总结
前端
十有八七15 分钟前
🧩 组件库死亡倒计时?—— AI 编码冲击下的前端基础设施重构
前端·人工智能
风止何安啊23 分钟前
我一个前端仔,居然用 Python 搞起了 AI?从零到一,撸了个 AI 聊天框小 demo
前端·人工智能·后端
GISer_Jing26 分钟前
Claude Code插件系统全解析
前端·人工智能·ai·架构
小茴香35339 分钟前
Vue3路由权限动态管理
前端·前端框架·vue3
RANxy43 分钟前
零基础全栈 React 入门(四):React Router 路由配置
前端·react.js
KaMeidebaby44 分钟前
卡梅德生物技术快报|peg 修饰调控 MXene/WS2 异质结,氨气传感器制备与机理研究
大数据·前端·人工智能·架构·spark·新浪微博
lichenyang4531 小时前
鸿蒙实战:安全高度 · 输入框贴键盘弹起 · Tab 底部导航全解
前端
前端毕业班1 小时前
uni-app 小程序样式隔离实践指南和原理分析
前端·javascript·vue.js