减少options请求次数以及前端post请求未发送options请求

摘要:
http的options方法使用目标资源支持的通信选项。1.检测服务器支持哪些HTTP方法;

1.什么是options请求?

  • http的options方法 使用获取目的资源所支持的通信选项。
  • 作用有二:1.检测服务器支持哪些 HTTP 方法;2.用来检查服务器的性能。比如向另一个域名发送options请求,用以判断发送的请求是否安全
  • 预检请求报文中的首部字段 Access-Control-Request-Method 首部字段告知服务器实际请求所使用的 HTTP 方法
  • 预检请求报文中的首部字段 Access-Control-Request-Headers 告知服务器实际请求所携带的自定义首部字段
  • 服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。
  • 减少options请求次数以及前端post请求未发送options请求第1张
  • 如上图,相应报文中 【allow】字段的值表明了服务器支持的所有http方法
  • 服务器所返回的 Access-Control-Allow-Methods 首部字段将所有允许的请求方法告知客户端,同allow类似

2.为什么会有options请求?

主要是cors为了解决浏览器同源策略和跨域。

解决跨域问题的方法有很多种,CORS是比较普遍使用也比较好的解决方案。

CORS是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。而这种访问是被同源策略所禁止的。

CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。

3.什么时候会发送options请求呢?

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

只要同时满足以下两大条件,就属于简单请求。

(1) 请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

凡是不同时满足上面两个条件,就属于非简单请求。

浏览器对这两种请求的处理,是不一样的。

=======但是项目中,设置axios的content-type:application/json的get请求,并没有发出options请求,

=======get请求没有请求体,无法携带content-type

3.如何减少options请求?

Access-Control-Max-Age:1800

首部字段 Access-Control-Max-Age 表明该响应的有效时间,单位是【秒】,浏览器自身维护了一个最大有效时间,如果该首部字段的值超过了最大有效时间,将不会生效。

Access-Control-Max-Age:-1时,将禁用options请求,需要对所有呼叫进行预检选项检查。

4.前端未发送options请求

 1) 确认是否为非简单请求

 2) 确认是否在Access-Control-Max-Age缓存时效内

免责声明:文章转载自《减少options请求次数以及前端post请求未发送options请求》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gitlab+jenkins自动化打包IOS-jenkins配置ORM中的查询中的参数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Axios

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端。简单的理解就是ajax的封装 它本身具有以下特征:      a.从浏览器中创建 XMLHttpRequest     b.从 node.js 发出 http 请求     c.支持 Promise API     e.拦截请求和响应     f.转换请求和响应数据 ...

pycha安装插件

pycharm安装插件 方法一: 有的插件不能下载 file-setting-plugins-搜索-Browse Repositories 方法二: https://plugins.jetbrains.com/搜索插件下载 file-setting-plugins -install选择下载好的压缩包即可 出现”Plugin 'Markdown suppo...

JVM总结(二)

JVM总结(2)java内存区域、字节码执行引擎 1、内存区域 程序计数器:知道线程执行位置,保证线程切换后能恢复到正确的执行位置。 虚拟机栈:存栈帧。栈帧里存局部变量表、操作栈、动态连接、方法返回地址。局部变量表又存了各种基本数据类型和对象引用(句柄)。 本地方法栈:为Native方法服务 堆:存放对象实例和数组,可以处于物理上不连续的内存空间 方法区...

Linq to sql 有什么办法可以实现消除列重复?

比如数据库里有一表,有两个字段:ID User1 小白2 小红3 小白 过滤User列为小白的重复项后,我想要得到:ID User1 小白2 小红 如果写db.linq.customer.Distinct<customer>();这样只能是每行全部匹配过滤,请问我应该怎么做? 自定义比较运算符: 1 //自定义比较符 2 public...

Nginx TCP和UDP负载均衡

Nginx TCP和UDP负载 1 介绍 负载均衡是指有效的通过多个后端服务器分发网络流量。 Nginx能代理和负载均衡TCP、UDP通信。TCP(传输控制协议)、UDP(用户数据包协议)是许多流行应用程序和服务的协议,例如LDAP、MySQL和RTMP使用TCP协议,DNS、syslog和RADIUS 2 需要 使用--with-stream配置标记...

MyCat 的入门和放弃

一、MyCat分库原理 1、非分片字段查询 Mycat中的路由结果是通过分片字段和分片方法来确定的。例如下图中的一个Mycat分库方案: 根据 tt_waybill 表的 id 字段来进行分片 分片方法为 id 值取 3 的模,根据模值确定在DB1,DB2,DB3中的某个分片 如果查询条件中有 id 字段的情况还好,查询将会落到某个具体的分片。例如:...