`
can_do
  • 浏览: 262483 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Do家】彻底搞懂CORS和OPTIONS

    博客分类:
  • CORS
阅读更多
【关于OPTIONS】
1> 首先了解CORS定义,官方:
Cross-Origin Resource Sharing (CORS) is a mechanism that uses additional HTTP headers to tell a browser to
let a web application running at one origin (domain) have permission to access selected resources from a server at a different origin.
A web application makes a cross-origin HTTP request when it requests a resource that has a different origin (domain, protocol, and port) than its own origin.

2> 发生CORS的条件:
A> 基于浏览器发请求
B> source-origin与destinaion-origin不匹配
  不匹配指的是:protocol,domian,port,任何一处不一致都定义为不匹配

3> 产生预请求preflight(OPTIONS)的条件:
A> CORS已发生
B> header传入额外或者自定义参数,如:X-Filter,Authorization,Content-type等
C> 请求method,非以下类型:
=>GET
=>HEAD
=>POST
D> 请求content-type,非以下类型:
=>application/x-www-form-urlencoded
=>multipart/form-data
=>text/plain
【小结】不发生CORS,肯定不发生OPTIONS,但发生CORS,并不一定发生OPTIONS,还需要满足一定的条件,header,method,content-type等

4> OPTIONS是由谁发起的?
=>由浏览器,满足规范规定的条件自动发起的,不可控制传入header参数。
=>产生预请求后,相当会发两次请求,OPTIONS+<YourSpecifiedMethod>,preflight和mainflight

5> 解决OPTIONS的Authorization问题
A> 避免走到OPTIONS
B> 传入的授权参数Authorization走URI,而不是从header传入,因为options,browser不会传入额外header参数的

6> 解决CORS方法如下:(选其一即可)
A> 通过Nginx或者其他反向代理服务器,统一source-origin和destination-origin的访问地址。
B> 提供destination-origin的server,重写header参数,如下:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:*
=>对于指定的source-origin,配置具体地址也行,<protocol>://<domain>:<port>
Allow: GET, HEAD, POST, PUT, OPTIONS
Access-Control-Allow-Methods:GET,POST,OPTIONS
Access-Control-Allow-Headers:Origin,GOFUNAUTHORIZATION,AUTHORIZATION,Content-Type

Reference=>https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests

【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:

分享到:
评论

相关推荐

    浅谈传统RTK单基站CORS和网络CORS的特点.pdf

    在当今的测绘领域,实时动态定位技术(Real-Time Kinematic,RTK)和连续运行参考站系统(Continuously Operating Reference Stations,CORS)是实现精确测量的关键技术。本文将探讨传统RTK单基站CORS与网络CORS的...

    cors-filter-1.7.jar,cors-filter-2.5.jar,cors-filter-2.10.jar

    标题中的“cors-filter-1.7.jar”,“cors-filter-2.5.jar”和“cors-filter-2.10.jar”是针对不同版本的CORS过滤器实现。这些jar包是专门为Tomcat设计的,用于处理跨域请求过滤,确保服务器能够安全地响应来自不...

    ASP.NET MVC Web Api 跨域访问

    var corsOptions = new CorsOptions { PolicyProvider = new CorsPolicyProvider { PolicyResolver = context =&gt; Task.FromResult(new CorsPolicy { Origins = new[] { "http://client.example.com" } }) } }...

    SpringMVC CORS跨域测试包

    在给定的压缩包中,可能包含了客户端和服务端的代码示例,客户端可能是使用JavaScript或jQuery发起跨域请求,服务端则展示了如何配置和处理CORS请求。 6. **安全考虑**:虽然CORS提供了一种安全的跨域访问方式,但...

    cors实现的跨域

    **正文** 跨域资源共享(CORS,Cross-Origin Resource Sharing)是一种机制,允许浏览器在执行JavaScript时,通过HTTP请求访问不同源的资源。...正确理解和使用CORS,能够帮助开发者构建更高效、更灵活的Web服务。

    cors2.5.jar

    预检请求是CORS中的一种特殊请求方式,对于非简单请求,浏览器会在正式通信前发送一个OPTIONS请求来询问服务器的许可。`cors2.5.jar`会自动处理这种预检请求。 总的来说,`cors2.5.jar`为Java Web开发者提供了一种...

    cors技术解决ajax跨域

    CORS提供了一种安全的方式来允许浏览器和服务器之间进行跨域通信,使得开发者可以突破同源策略的限制。 **一、CORS的工作原理** 1. **预检请求(Preflight Request)** 当浏览器发现请求方法不是GET、HEAD或POST...

    cors跨域Tomcat文件

    【标题】"cors跨域Tomcat文件"涉及的是在Web开发中解决跨域问题的一种常见方法,即使用CORS(Cross-Origin Resource Sharing)机制在Apache Tomcat服务器上配置和实现。CORS是一种允许浏览器安全地从不同源加载资源...

    Tomcat下的配置CORS包

    CORS支持预检请求(OPTIONS),以确保服务器允许特定的请求方法和头部。 配置CORS在Tomcat中主要分为以下几个步骤: 1. **添加库文件**:`cors-filter-1.7.jar` 和 `java-property-utils-1.9.jar` 是实现CORS过滤...

    跨域cors扩展插件chrome

    标题中的“跨域cors扩展插件chrome”指的是用于解决Web应用程序跨域问题的Chrome...允许CORS的插件是解决开发过程中的跨域限制的有效解决方案,但使用时需注意仅限于测试和开发环境,正式部署时应遵循标准的CORS配置。

    vue axios 解决跨域问题CORS

    在开发Web应用时,我们经常会遇到“跨域”(CORS)的问题,特别是在使用Vue.js框架和axios库进行API调用时。Vue.js是一个轻量级的前端框架,而axios则是一个基于Promise的HTTP库,它广泛用于Vue项目中进行数据获取和...

    cors-filter-2.5.jar

    在实际应用中,开发者需要在Web应用的部署描述符(如web.xml)中配置CORS Filter,设置允许的源、方法和其他CORS策略。例如,以下是一个简单的配置示例: ```xml &lt;filter-name&gt;CORS &lt;filter-class&gt;...

    tomcat cors.rar

    "tomcat cors.rar"这个压缩包提供了实现这一功能所需的组件,包括`cors-filter-2.4.jar`和`java-property-utils-1.9.1.jar`。 【CORS滤镜介绍】 `cors-filter-2.4.jar`是一个第三方库,专门用于处理CORS请求。它是...

    Laravel开发-cors-laravel

    本教程将详细讲解如何在Laravel项目中处理和配置CORS,以确保不同源的客户端可以顺利访问服务端资源。 **什么是CORS?** CORS是一种W3C标准,它允许浏览器向非同源(即与当前页面的源不同)的服务器发起...

    provider-coustomer-CORS跨域.zip

    标签 "java CORS SpringBoot" 明确指出了我们要在Java语言和SpringBoot框架的背景下讨论CORS。SpringBoot以其简洁的配置和强大的功能,被广泛用于构建RESTful API服务,而CORS配置在SpringBoot中可以通过注解或配置...

    南方cors在山东网的使用步骤

    南方CORS(Continuously Operating Reference Station)是利用GPS技术来实现高精度的定位和测绘的系统。在山东网中,南方CORS的使用步骤主要包括安装、配置、数据采集和数据处理等几个方面。以下是南方CORS在山东网...

    cors-filter-2.6和java-property-utils-1.13

    标题 "cors-filter-2.6和java-property-utils-1.13" 提及了两个关键的Java库,分别是CORS Filter 2.6和Java Property Utils 1.13。这些库在Java开发中有着重要的作用,特别是对于Web应用程序。 **CORS Filter 2.6**...

    Spring boot 和Vue开发中CORS跨域问题解决

    本文旨在详细阐述CORS跨域问题的背景、解决方法以及如何在Spring Boot和Vue.js的结合使用场景下处理跨域问题。 ### CORS跨域问题背景 CORS全称是Cross-Origin Resource Sharing,即跨源资源共享。这个概念是W3C的...

    cors-filter-1.7.jar 和 java-property-utils-1.9.jar

    - `cors.maxAge`: 预检请求(OPTIONS请求)的缓存时间。 - `cors.allowCredentials`: 是否允许携带Cookie信息。 了解并正确配置这些参数,可以确保你的Web应用支持安全、灵活的CORS跨域访问。在实际应用中,根据...

Global site tag (gtag.js) - Google Analytics