问题记录 坑爹的跨域问题

Posted snowxia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问题记录 坑爹的跨域问题相关的知识,希望对你有一定的参考价值。

关于跨域问题 ,是一个老生常谈的问题了。网上也存在一大片的解决方案。在此本人只是记录一下在项目中遇到的跨域问题的处理方法。

首先项目中遇到的问题:

  初始:以为就是一个简单的跨域问题,在web.config中加一个配置或者用Cors就行了。

web.config 加配置:在<system.webServer>节点加一下配置

技术图片

 

 

 

或者代码中加Cors

 技术图片

以上两种解决方法按理来说就能解决跨域的问提。但是在这次项目中就不行。

调用接口报错了。敢信!

报错:The value of the ‘Access-Control-Allow-Origin‘ header in the response must not be the wildcard ‘*‘ when the request‘s credentials mode is ‘include‘.

后来继续研究了一下,是因为客户端调用接口设置了 请求携带了验证身份信息,就是说调用接口时传了Cookie信息。按之间的在web.config加配置或在代码中加Cors是行不通的。

 

可以理解为这是一条http协议或者CORS的规则。

就是当request中设置了withCredentials : true,也就是请求携带了验证身份信息时,

response的Access-Control-Allow-Origin : *,(而是应该有请求身份过滤)

否则的话,请求会失败。

 

发现问题所在,就简单了。

这个时候首先想到的解决方案就是不传Cookie,换成JWT 用Token 验证。单考虑到项目已经在运行中了。抛弃

另外一个解决方案就是继续像web.config中加配置

技术图片

 

 

 改成这样,客户端调用接口成功。

 

其中调用接口回访问两次,一次是Method 为OPTIONS,

可以配置"Access-Control-Max-Age",表明在86400秒内,不需要再发送预检验请求,可以缓存该结果

可以扩展一个Module 去拦截Method 为OPTIONS的请求直接返回

代码:

技术图片

 

 需在web.config中配置module

技术图片

 

 

结束。

记第一次写博客。

搓的一匹。

见谅。

以上是关于问题记录 坑爹的跨域问题的主要内容,如果未能解决你的问题,请参考以下文章

不同域iframe主动与父容器通讯的方法

踩坑记录搭建SpringCloud项目时,使用vue把存在本地的token发送到后端,经过gateway网关出现的跨域问题

踩坑记录搭建SpringCloud项目时,使用vue把存在本地的token发送到后端,经过gateway网关出现的跨域问题

踩坑记录搭建SpringCloud项目时,使用vue把存在本地的token发送到后端,经过gateway网关出现的跨域问题

踩坑记录搭建SpringCloud项目时,使用vue把存在本地的token发送到后端,经过gateway网关出现的跨域问题

使用ajax请求遇到的跨域问题