zoukankan      html  css  js  c++  java
  • CORS跨域解决方案

    跨域问题出现的原因:

    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

  • 相关阅读:
    AC3 encoder flow
    AC3 IMDCT
    AC3 Rematrix
    AC3 channel coupling
    AC3 mantissa quantization and decoding
    AC3 bit allocation
    AC3 exponent coding
    C# 判断字符串为数字 int float double
    vs 修改默认的调试浏览器
    visio 如何扩大画布大小
  • 原文地址:https://www.cnblogs.com/zhangrgLearning/p/13256362.html
Copyright © 2011-2022 走看看