我遇到了一个奇怪的laravel中间件行为,我不知道发生了什么或为什么...
问题:laravel中间件无法应用响应头
让我们开始吧...
我已经开发了一个Web应用程序。
我们正在谈论的应用是网络蜘蛛/爬虫。
该应用程序包含多个工作程序,其中一些用于下载html内容,一些用于解析内容。
行为异常的工人是robot category pagination url
。
我可以使用GET
或POST
请求访问工作程序,如下所示。
在/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
,则一切正常。
为什么会这样?
将应用程序设置为生产环境时,我需要中间件类来完成它的工作。