瀏覽器跨域會(huì)發(fā)生兩個(gè)請(qǐng)求 一個(gè)OPTIONS預(yù)請(qǐng)求 如果設(shè)置的只有post路由 路由里面找不到OPTIONS路由就會(huì)直接返回404 或者回退到Route::fallback() 不會(huì)調(diào)用跨域中間件 造成跨域失敗
經(jīng)實(shí)驗(yàn):設(shè)置any路由能正??缬?我路由都是根據(jù)不同的method實(shí)現(xiàn)不同的功能 沒辦法都用any路由 這個(gè)怎么處理???
文檔寫了
跨域可能會(huì)產(chǎn)生OPTIONS請(qǐng)求,我們不想OPTIONS請(qǐng)求進(jìn)入到控制器,所以我們?yōu)镺PTIONS請(qǐng)求直接返回了一個(gè)空的響應(yīng)(response(''))實(shí)現(xiàn)請(qǐng)求攔截。
如果你的接口需要設(shè)置路由,請(qǐng)使用Route::any(..) 或者 Route::add(['POST', 'OPTIONS'], ..)設(shè)置。
是不是配置了fallback
fallback不走中間件
你可以在fallback里面配置跨域返回
Route::fallback(function (Request $request) {
$response = strtoupper($request->method()) === 'OPTIONS' ? response('', 204) : response('', 404);
$response->withHeaders([
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Allow-Origin' => "*",
'Access-Control-Allow-Methods' => '*',
'Access-Control-Allow-Headers' => '*',
]);
return $response;
});