为了安全考虑,浏览器对资源访问有同源限制的问题,也就是web应用程序只能访问和它同一协议同一域名同一端口的web应用程序上的资源。

通过跨域资源共享机制可以让资源在浏览器中访问与该资源本身不同域的资源,资源会发起一个跨域的http请求。

浏览器发送options请求是一种cors预检测的行为,主要用来获取服务器支持的http请求方法和检查服务器的性能。

 什么情况下浏览器会发送options请求?

预检测请求出现在跨域http请求中的非简单请求之前。

什么是简单请求?什么是非简单请求?

  区别简单请求和非简单请求:请求方式、首部字段、content-type、xmlHttpRequestUpload有无注册任何事件监听、请求中有无使用ReadableStream

  简单请求:

   请求方式:get/head/post请求

首部字段:只有Accept、Accept-Language、Content-Language、Content-Type等规范中定义的对cors安全对首部字段集合中的字段

content-type:仅为text/plain、multipart/form-data、application/x-www-form-urlencoded

xmlHttpRequestUpload没有注册了事件监听

没有使用ReadableStream

非简单请求:

       和简单请求相反,非简单请求会发送预检请求,即在请求之前发一次options请求

http系列之请求方法、http报文

参考资料:

MDN:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

https://cloud.tencent.com/developer/article/1046663

problem:为什么会有options请求的更多相关文章

  1. 为什么会有OPTIONS请求

    在做项目时,很多时候发送一个post请求,是先发送一个option请求,然后再发送post请求,一直这么用之前也没有仔细思考,今天有时间,好好了解一下为什么会多一次请求. 疑问1:什么是options ...

  2. jquery ajax 请求中多出现一次OPTIONS请求及其解决办法

    http://www.tangshuang.net/2271.html 在上一篇<服务端php解决jquery ajax跨域请求restful api问题及实践>中,我简单介绍了如何通过服 ...

  3. ( 转 ) CORS 有一次 OPTIONS 请求的原理

    刚接触前端的时候,以为HTTP的Request Method只有GET与POST两种,后来才了解到,原来还有HEAD.PUT.DELETE.OPTIONS-- 目前的工作中,HEAD.PUT.DELE ...

  4. http跨域时的options请求

    1.背景 在前后端分离的项目中经常会遇到跨域请求的问题,如果没有进行跨域配置,会浏览器请求失败.我一般采用两种解决方案: 1.采用nginx进行转发,是前后端服务处于同一个域下面,从根本上避免跨域问题 ...

  5. Laravel 处理 Options 请求的原理以及批处理方案

    0. 背景 在前后端分离的应用中,需要使用CORS完成跨域访问.在CORS中发送非简单请求时,前端会发一个请求方式为OPTIONS的预请求,前端只有收到服务器对这个OPTIONS请求的正确响应,才会发 ...

  6. Laravel + Vue 之 OPTIONS 请求的处理

    问题: 在 Vue 对后台的请求中,一般采用 axios 对后台进行 Ajax 交互. 交互发生时,axios 一般会发起两次请求,一次为 Options 试探请求,一次为正式请求. 由此带来的问题是 ...

  7. AJAX 请求中多出了一次 OPTIONS 请求 导致 Laravel 中间件无法对 Header 传入的 Token 无法获取

    背景知识: 我们会发现,在很多post,put,delete等请求之前,会有一次options请求.本文主要是来讨论一下这是什么原因引起的. 根本原因就是,W3C规范这样要求了!在跨域请求中,分为简单 ...

  8. AJAX请求中出现OPTIONS请求

    背景 有一个前后端分离的VUE项目来发送ajax请求, 查看Nginx日志或使用Chrome Dev Tools查看请求发送情况时, 会看到每次调后台API的请求之前, 都会发送一个OPTIONS请求 ...

  9. Spring boot处理OPTIONS请求

    一.现象从fetch说起,用fetch构造一个POST请求. fetch('http://127.0.0.1:8000/api/login', { method: "POST", ...

随机推荐

  1. Spring mvc 导出table到Excel

    /** * * @Title: exportExcel * @Description: TODO(导出到excel) * @param Page page * @return ModelAndView ...

  2. C语言--第三周作业评分和总结(5班)

    作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1073 一.评分要求 要求1 完成PTA第三周所有题(20分). 要求2 4道 ...

  3. PTA——猜数字游戏

    PTA 7-24 猜数字游戏 #include <stdio.h> int main() { int num, times; scanf("%d %d", &n ...

  4. java中类加载时机

    java虚拟机规范虽然没有强制性约束在什么时候开始类加载过程,但是对于类的初始化,虚拟机规范则严格规定了有且只有四种情况必须立即对类进行初始化,遇到new.getStatic.putStatic或in ...

  5. sqlyog数据库管理软件下载

    下载安装包 一路next 链接:https://pan.baidu.com/s/1tdIwtYEW11MNWk--Hqd3dw 提取码:0ffp 复制这段内容后打开百度网盘手机App,操作更方便哦 然 ...

  6. Spring事务管理机制的实现原理-动态代理

    之前在做项目中遇到spring无法进行事务代理问题,最后发现是因为没有写接口,原因当时明白了,看到这篇文章写的清楚些,转过来 我们先来分析一下Spring事务管理机制的实现原理.由于Spring内置A ...

  7. webpack报错:Module build failed (from ./node_modules/babel-loader/lib/index.js): Error: Cannot find module 'babel-preset-env' from '...' - Did you mean "@babel/env"?

    webpack报错:Module build failed (from ./node_modules/babel-loader/lib/index.js): Error: Cannot find mo ...

  8. webstorm版本2017.2开发stylus报错

    style 部分声明的时候,要有lang和type属性. 前提是,已经npm安装了stylus,stylus-loader. <style lang='stylus' type='text/st ...

  9. hdfs 例子

    package hadoop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; ...

  10. 关于meshgrid和numpy.c_以及numpy.r_

    meshgrid的目的是生成两套行列数一致的矩阵,其中一个是行重复,一个是列复制:可以这么来理解,通过ravel()将矩阵数据拉平之后,就可以将这两套矩阵累加在一起,形成一个两行数据,要达到这个效果是 ...