跨域问题出现的原因:
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