Laravel CORS中间件返回标头的奇怪行为

时间:2018-08-10 06:25:39

标签: php cors web-crawler middleware laravel-5.6

我遇到了一个奇怪的laravel中间件行为,我不知道发生了什么或为什么...

问题:laravel中间件无法应用响应头

让我们开始吧...

我已经开发了一个Web应用程序。

我们正在谈论的应用是网络蜘蛛/爬虫。

该应用程序包含多个工作程序,其中一些用于下载html内容,一些用于解析内容。

行为异常的工人是robot category pagination url

我可以使用GETPOST请求访问工作程序,如下所示。

/routes/web.app中,我有以下指示:

Route::get('/robot/category-pagination-url-download', 'RobotController@categoryPaginationUrlDownload')->middleware('cors_robot_api_call');
Route::post('/robot/category-pagination-url-download/{api_call?}', 'RobotController@categoryPaginationUrlDownload')->middleware('cors_robot_api_call');

App\Http\Kernel.php内的protected $routeMiddleware数组中,我有'cors_robot_api_call' => \App\Http\Middleware\C_O_R_S_RobotApiCallHeaders::class,

我在App\Http\Middleware\C_O_R_S_RobotApiCallHeaders.php内:

class C_O_R_S_RobotApiCallHeaders
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        $response->header('Access-Control-Allow-Origin', '*')
            ->header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With');

        return $response;
    }
}

现在变硬了...

我的机器人代码如下:

permission = true

if(permission){

load model_a

if(model_a){
//ok
}else{
//error
permission=false
}

}

if(permission){

load model_b

if(model_b){
//ok
}else{
//error
permission=false
}

}

if(permission){

load model_c

if(model_c){
//ok
}else{
//error
permission=false
}

}

如果model_a存在,则permission仍为true,并且机器人将尝试加载model_b

在这种情况下,中间件类的行为很奇怪,并且CORS响应标头被忽略。

如果我在第一个permission语句之后,第二个false语句之前将if设置为if,则一切正常。

为什么会这样?

将应用程序设置为生产环境时,我需要中间件类来完成它的工作。

0 个答案:

没有答案