微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CORS 的问题 COLDBOX - Coldfusion

如何解决CORS 的问题 COLDBOX - Coldfusion

我们在后端应用程序中使用 ColdBox,但在使用 CORS 时遇到了奇怪的问题。我们有一个 preProcess 函数作为 ajax 调用拦截器,它是这样的:

函数预处理(事件、数据、缓冲区、rc、prc){

    event.setHTTPHeader( name="Access-Control-Allow-Origin",value="http://localhost:3000" );      
    event.setHTTPHeader( name="Access-Control-Request-Headers",value="" );
    event.setHTTPHeader( name="Access-Control-Request-Methods",value="GET,HEAD,POST" );
    event.setHTTPHeader(name="Allow-Control-Allow-Credentials",value="true");
    event.setHTTPHeader( name="Access-Control-Allow-Headers",value="*");

    var uuid = CreateUUID();
    var util = new com.smartvillage.api.util.ResponseUtil();
    var validator = new com.smartvillage.core.util.JsonValidator.JsonValidator();

    var model = server[ "wireBox-smartvillage" ];


    event.setValue( "model",model );
    event.setValue( "util",util );
    event.setValue( "validator",validator );
    event.setValue( "uuid",uuid );

    var authSvc = model.getInstance( "AuthService" );
    var ctx = arguments.event.getContext();

    util.writeData( "#arguments.event.getContext().event#-#uuid#",SerializeJSON( data ) );

    var ht = GetHTTPRequestData();

    var data = {
        "url"     = url,"form"    = form,"date"    = Now(),"content" = ht.content,"headers" = ht.headers,"method"  = ht.method
    }

    if (ctx.event NEQ "auth.login" ) {
      
        var accesstoken = event.getHTTPHeader("Authorization");
    
            cffile(action="append",file=expandpath('/debug.log'),output="#Now()#- #accesstoken# -");
            
            if (len(accesstoken)) {

                if ( !authSvc.isAuth( trim(accesstoken.replace('Bearer','')) )  ) {
                
                    event.renderData(data="Not Authorized",statusCode="401",statusText="Unauthorized")
                        .noExecution();

                } 
            } else {

                echo('Token not found');
                abort;

            }

    };
    
};

如您所见,我们为我们的本地主机(客户端运行的地方)设置了允许原始标头,但发生的情况是,虽然某些 ajax 调用成功,但其他调用因 Cors 问题而失败。下图显示了我们的网络。

enter image description here

如您所见,同一个调用随机失败或成功。它给我们的错误是:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

为什么会发生这种情况?

编辑:

当有连续的​​ ajax 调用时,我可以看到它发生。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。