ajax带header 跨域cors请求 报错

浏览:2120 发布日期:2018/07/20 分类:ThinkPHP5专区 关键字: thinkPHP5 cors 跨域 token
'THINK_VERSION', '5.0.12'

前端代码 $.ajax({
            type:'POST',
            crossDomain:true,
            headers:{
              'token':tokendata
            },
            url:restUrl+"v1/xxx",
            data:datadata,
            success:function(result){
                console.log(result);
            },
            error:function(xhr,status,error){
                console.log(JSON.stringify(xhr));//解析xhr对象
            }
        });
thinkPHP代码namespace app\api\behavior;


use think\Response;

class CORS
{
    public function appInit(&$params)
    {
        //跨域访问的时候才会存在此字段
        $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
        dump($origin);

        $allow_origin = config('corsConfig')['allow_origin'];
        //dump($allow_origin);
        //dump(in_array($origin, $allow_origin));
        if(in_array($origin, $allow_origin)){
            //dump($origin);
            header('Access-Control-Allow-Origin:'.$origin);
//            header('Access-Control-Allow-Origin:*');
            header('Access-Control-Allow-Methods:OPTIONS,POST,GET');
            header('Access-Control-Allow-Headers:Authorization,token,Origin,X-Requested-With,Content-Type,Accept');
        }
        if(request()->isOptions()){
            exit();
        }
    }
}
下面是tags.php的代码return [
    // 应用初始化
    'app_init'     => [
        'app\\api\\behavior\\CORS'
        ],
    // 应用开始
    'app_begin'    => [],
    // 模块初始化
    'module_init'  => [],
    // 操作开始执行
    'action_begin' => [],
    // 视图内容过滤
    'view_filter'  => [],
    // 日志写入
    'log_write'    => [],
    // 应用结束
    'app_end'      => [],
];
问题
1.去除ajax请求中的headers,请求一切正常
2.如上,ajax请求中带有headers的时候,报错如下图

附件 corsbug.png ( 47.9 KB 下载:22 次 )

最佳答案
评论( 相关
后面还有条评论,点击查看>>