当前位置: 首页 > news >正文

OPTIONS请求(跨域预检查)

目录

    • 一、什么是OPTIONS请求?
    • 二、简单请求、复杂请求
    • 三、特定的请求头、响应头

一、什么是OPTIONS请求?

OPTIONS 请求方式是 HTTP 协议中的一种,主要用于 响应头中获取服务器支持的HTTP请求方式

  • OPTIONS 请求方式是 浏览级行为,当请求存在跨域时,根据浏览器的同源策略,浏览器会对 ajax 请求发送 OPTIONS 请求进行预检查
  • 一般只限制 ajax 请求,不会限制 link、img、script、iframe 请求
  • 服务器后端之间的跨域请求时不用发 OPTIONS 请求的。

在这里插入图片描述

OPTIONS请求特性:

  • 没有请求体
  • 没有响应体
  • 安全
  • 幂等性;(同一个接口请求多少次都一样)
  • 不能缓存
  • 不能在表单里面使用

二、简单请求、复杂请求

某些请求不会触发 CORS 预检请求,这样的请求一般称为 简单请求,而会触发预检的请求则是 复杂请求

简单请求:

(以下条件需全部满足)

  • 请求方式: GET、HEAD、POST。

  • 设置规范集合之内的首部字段,如:Accept、Accept-Language、Content-Language、Content-Type、DPR、Downlink、Save-Data、Viewport-Width、Width。

  • Conten-Type 的值仅限于下列三者之一,即:application/x-www-form-urlencodedmultipart/form-datatext/plain

    (注意:如果 GET、POST 请求使用了 Content-Type: application/jsontoken类 的请求头,也会触发 OPTIONS 请求预检)

  • 请求中的任意 XMLHttpRequestUpload 对象均没有注册任何事件监听器。

  • 请求中没有使用 ReadableStream 对象。

复杂请求:

(以下条件满足任意一项)

  • 请求方式:PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH。
  • 人为设置了简单请求之外的首部字段。
  • Content-Type 的值不属于下列三者之一:application/x-www-form-urlencoded、multipart/form-data、text/plain。

三、特定的请求头、响应头

特定的请求头:

  • Access-Control-Request-Method:告知服务器,实际请求将使用的请求方式(如:GET、POST等)。

    例如:Access-Control-Request-Method: GET

  • Access-Control-Request-Headers:告知服务器,实际请求将携带的自定义请求首部字段。

    例如:Access-Control-Request-Headers: token

特定的响应头:

  • Access-Control-Allow-Methods:允许客户端使用的请求方式。

    例如:Access-Control-Allow-Methods: PUT

  • Access-Control-Allow-Origin:允许跨域请求的域名,如果要允许所有域名则设置为 *。

    例如:Access-Control-Allow-Origin: http://localhost:8080

  • Access-Control-Allow-Headers:允许请求携带的请求头。

    例如:Access-Control-Allow-Headers: token, Origin

  • Access-Control-Allow-Credentials:是否允许携带 cookie。

    例如:Access-Control-Allow-Credentials: true

  • Access-Control-Max-Age:指定了预检请求的结果能够被缓存多久,即多久发送一次OPTIONS请求。

    例如:Access-Control-Max-Age: 60(1分钟内不再发 options 请求)

整理完毕,完结撒花~🌻





参考地址:

1.什么是options请求?为什么会有options请求?https://blog.csdn.net/gwdgwd123/article/details/100554117

相关文章:

  • Android 12.0 系统修改usb连接电脑mtp和PTP的显示名称
  • [概率论]期中考AB卷题目答案及详解
  • IDEA 配置阿里规范检测
  • Visio 2003简体中文版软件安装教程(附软件下载地址)
  • 【大模型学习记录】db-gpt源码安装问题汇总
  • 计算机毕业设计-基于Python的“哔哩哔哩视频网”视频热度分析
  • Python爬虫-数据采集和处理
  • Linux初识环境变量
  • HarmonyOS4.0—自定义渐变导航栏开发教程
  • HTML静态网页成品作业(HTML+CSS)——非遗徽州木雕网页(6个页面)
  • Vue2前端权限控制实战
  • P8711 [蓝桥杯 2020 省 B1] 整除序列 存疑解决篇 Python
  • 【SpringSecurity】十三、基于Session实现授权认证
  • php 对接Pangle海外广告平台收益接口Reporting API
  • mysql之基本概念与安装
  • 77. Combinations
  • chrome扩展demo1-小时钟
  • eclipse的离线汉化
  • export和import的用法总结
  • Java面向对象及其三大特征
  • Java新版本的开发已正式进入轨道,版本号18.3
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python_OOP
  • 搞机器学习要哪些技能
  • 聊聊directory traversal attack
  • 前端
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 小程序开发中的那些坑
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​人工智能书单(数学基础篇)
  • ​香农与信息论三大定律
  • !!Dom4j 学习笔记
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (02)vite环境变量配置
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一) storm的集群安装与配置
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转) Android中ViewStub组件使用
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .NET BackgroundWorker
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net 知识杂记
  • .net开发时的诡异问题,button的onclick事件无效
  • /proc/vmstat 详解
  • @Autowired和@Resource装配