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,则表示不缓存,每次请求前都会发送预检请求。

相关推荐
硬汉嵌入式1 小时前
Microchip开源的自家网络协议栈确实不错,功能完善,并且支持图形化一键配置
网络协议
天人合一peng2 小时前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
方也_arkling3 小时前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐3 小时前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
web打印社区3 小时前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
RFCEO3 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素
Amumu121384 小时前
Vuex介绍
前端·javascript·vue.js
We་ct4 小时前
LeetCode 54. 螺旋矩阵:两种解法吃透顺时针遍历逻辑
前端·算法·leetcode·矩阵·typescript
B2_Proxy4 小时前
IP 来源合规性,正在成为全球业务的隐性门槛
网络·爬虫·网络协议·安全
2601_949480064 小时前
【无标题】
开发语言·前端·javascript