首页 > 其他分享 >跨域之OPTION请求【转载】

跨域之OPTION请求【转载】

时间:2024-04-24 15:24:40浏览次数:28  
标签:Control Access 浏览器 请求 预检 Content OPTION 转载 跨域

一、简介

    出于安全考虑,并不是所有域名访问后端服务都可以。其实在正式跨域之前,浏览器会根据需要发起一次预检(也就是option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。那么浏览器在什么情况下能预检呢?

二、两种请求方式

    浏览器将CORS请求分为两类:简单请求(simple request)和非简单请求(not-simple-request),简单请求浏览器不会预检,而非简单请求会预检。这两种方式怎么区分?

同时满足下列三大条件,就属于简单请求,否则属于非简单请求

1.请求方式只能是:GET、POST、HEAD

2.HTTP请求头限制这几种字段:Accept、Accept-Language、Content-Language、Content-Type、Last-Event-ID

3.Content-type只能取:application/x-www-form-urlencoded、multipart/form-data、text/plain

对于简单请求,浏览器直接请求,会在请求头信息中,增加一个origin字段,来说明本次请求来自哪个源(协议+域名+端口)。服务器根据这个值,来决定是否同意该请求,服务器返回的响应会多几个头信息字段,如图所示:上面的头信息中,三个与CORS请求相关,都是以Access-Control-开头。

1.Access-Control-Allow-Origin:该字段是必须的,* 表示接受任意域名的请求,还可以指定域名

2.Access-Control-Allow-Credentials:该字段可选,是个布尔值,表示是否可以携带cookie,(注意:如果Access-Control-Allow-Origin字段设置*,此字段设为true无效)

3.Access-Control-Allow-Headers:该字段可选,里面可以获取Cache-Control、Content-Type、Expires等,如果想要拿到其他字段,就可以在这个字段中指定。比如图中指定的GUAZISSO

非简单请求是对那种对服务器有特殊要求的请求,比如请求方式是PUT或者DELETE,或者Content-Type字段类型是application/json。都会在正式通信之前,增加一次HTTP请求,称之为预检。浏览器会先询问服务器,当前网页所在域名是否在服务器的许可名单之中,服务器允许之后,浏览器会发出正式的XMLHttpRequest请求,否则会报错。(备注:之前碰到预检请求后端没有通过,就不会发正式请求,然后找了好久原因,原来后端给忘了设置...)Java后端实现拦截器,排除Options

就Content-Type为application/json为例:对比两张图片,一次预检请求,一 次正式请求:

预检请求

正式请求

很明显,请求头中预检请求不会携带cookie,正式请求会携带cookie和参数。跟普通请求一样,响应头也会增加同样字段。

一旦服务器通过了“预检”请求,以后每次浏览器正常的CORS请求,就都跟简单请求一样。


注:本文转载于https://www.jianshu.com/p/5cf82f092201

标签:Control,Access,浏览器,请求,预检,Content,OPTION,转载,跨域
From: https://www.cnblogs.com/iuniko/p/18155520

相关文章

  • 【转载】git push到远程指定分支(git拉取指定分支代码)
     一、pull操作1、将远程指定分支拉取到本地指定分支上:gitpullorigin<远程分支名>:<本地分支名> (注:命令里的尖括号<>只是包裹中文的标识,方便你看的,实际使用时不用写,不过冒号需要)2、将远程指定分支拉取到本地当前分支上:gitpullorigin<远程分支名> 3、将与......
  • android studio Edit Custom VM Options后无法启动
    异常描述:想要修改虚拟器的内存,就百度了方法,设置了Help——EditCustomVMOptions,然后AndroidStudio就无法启动了,直接弹这个弹窗:所以,建议大家写文,还是要有头有尾,该上图上图,不能啪啪几个字让人猜啊,容易误导人的啊啊啊!!!解决问题:按这个路径查找到更改的文件,C:\Users\XXXX\AppDat......
  • 保障跨域数据交换安全可控,跨域数据管控方案了解一下!
    跨域数据管控是指当数据从一个安全域(通常由单一组织控制)传输到另一个安全域时,对数据的流动和使用进行管理和控制的过程。这通常涉及到确保数据的安全性、合规性以及完整性,同时允许在不同组织或地理位置间进行有效的数据交换。跨域数据管控需要围绕三个风险展开:数据泄露风险、数......
  • 【转载】异步 LINQ
    原文:https://blog.csdn.net/zls365365/article/details/124395742LINQ这个东西,出来很早了,写过几年代码的兄弟们,或多或少都用过一些。早期的LINQ,主要是同步的,直到C#8.0加入IAsyncEnumerable,LINQ才真正转向异步。这本来是个非常好的改变,配合System.Linq.Async库提供的扩......
  • Web【转载学习】
    Web[转载学习]随着WEB2.0、社交网络、微博等等一系列新型的互联网产品的诞生,基于WEB环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在WEB平台上,WEB业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是WEB安全威胁的凸显,黑客利用网站操作系统的漏洞和WE......
  • FFT转载
    快速傅里叶变换(FFT)详解原文链接:快速傅里叶变换(FFT)详解-自为风月马前卒-博客园(cnblogs.com)目录前言多项式系数表示法点值表示法复数向量圆的弧度制平行四边形定则复数运算法则单位根单位根的性质快速傅里叶变换快速傅里叶逆变换理论总结......
  • 转载Using Domain-Driven Design(DDD)in Golang
    转载自:https://dev.to/stevensunflash/using-domain-driven-design-ddd-in-golang-3ee5UsingDomain-DrivenDesign(DDD)inGolang#go#ddd#redis#postgresDomain-DrivenDesignpatternisthetalkofthetowntoday.Domain-DrivenDesign(DDD)isanapproachtosoft......
  • 【转载】Java函数式编程——为什么new Thread()中要用函数式编程
    面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,......
  • 【转载】WPF中Binding使用StringFormat格式化字符串方法
    原文链接:https://www.cnblogs.com/xuliming/articles/StringFormat.htmlWPF中Binding使用StringFormat格式化字符串方法 货币格式<TextBlockText="{BindingPrice,StringFormat={}{0:C}}"/>//$123.46货币格式,一位小数<TextBoxText="{BindingPrice,Stri......
  • [转载]mtu值怎样设置才网速最快
    推荐看原文链接mtu值怎样设置才网速最快-百度经验背景:什么是mtu答:mtu本地大于网络mtu,传输就会拆包,mtu本地设置小于mtu,就发挥不了网络最大传输能力,合适最好测试最佳mtu值ping-l1500-fwww.baidu.com如果出现超时结果正在Pingwww.baidu.com具有1500字节的数据:......