码迷,mamicode.com
首页 > 其他好文 > 详细

CORS跨域解决方案

时间:2020-07-06 20:04:38      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:origin   core   art   bsp   --   ring   cross   限制   follow   

跨域问题出现的原因:

1.域

2.端口

3.协议

跨域一般是由AJAX请求引发的问题,http请求不受此影响。

解决跨域问题较多的使用CORS方案,JSONP逐渐被淘汰,因为JSONP只支持GET请求。

CORS解决跨域:

     <requestFiltering>
          <verbs>
            <add verb="OPTION" allowed="false" />
          </verbs>
        </requestFiltering>

1.屏蔽调红色代码

2.<httpProtocol>
        <customHeader>
          <add name="Access-Control-Allow-Origin" value="*" />
          <add name="Access-Control-Allow-Headers" value="X-Requested-With,Content-Type,Accept,Origin" />
          <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTION" />

        </customHeader>

  </httpProtocol>
增加/修改配置以上信息。

如果仍然有跨域问题,可排查一下几点:

接口中有限制死一些请求类型(比如写死了POST等)

接口中,重复配置了Origin:*,去除即可

IIS服务器中,重复配置了Origin:*,去除即可。

--------------------------------------------------------------

 

OPTIONS预检的优化:

在请求的头部加上:

Access-Control-Max-Age:600;

在10分钟内内,所有同类型的请求都将不再发送预检请求而是直接使用此次返回的头作为判断依据。

另外:在使用CORS解决跨域问题时肯呢个会出现SessionID刷新问题

可以如下解决:

在WebConfig中(上面第二点)加入:      <add name="Access-Control-Allow-Credentials" value="true" />

前台:

$.ajax({
url:url,
//加上这句话
xhrFields: {
    withCredentials: true
},
crossDomain: true,
success:function(result){
    alert("test");
},
error:function(){
}
});

 

当然,以上关于头部的设置也可以通过滤器或者自定义扩展方法加入请求头部中。

在ASP.NET CORE中,启用跨域请求可参考官方文档(很全)

https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-2.2

CORS跨域解决方案

标签:origin   core   art   bsp   --   ring   cross   限制   follow   

原文地址:https://www.cnblogs.com/zhangrgLearning/p/13256362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!