Laravel 5.5 跨域 中介軟體
阿新 • • 發佈:2019-01-01
Laravel 5.5中介軟體跨域訪問
做api介面的時候碰到個問題,跨域!
解決方法有很多,但是方便的依舊那麼一兩個。
第一種,最方便的,新建一個middleWare,把這個middleware加入到全域性中介軟體,所有的請求,都會經過這個中介軟體的過濾。
php artisan make:middleware CrossHttp
然後就會在\app\Http\Middleware\CrossHttp.php這個中介軟體,在handle方法裡面新增如下程式碼:
public function handle($request, Closure $next) {
$response = $next($request);
$response->header('Access-Control-Allow-Origin', '*');
$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept');
$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');
//如果想要傳遞session和cookie,把這個開啟,並且上面要指定域名,
//$response->header('Access-Control-Allow-Credentials', 'true');
return $response;
}
意思是允許所有的域都能訪問這個介面
注:但是這時候不能傳遞session和cookie
如果想要指定域名來訪問,就這樣寫:
//單個地址的跨域訪問
$response->header('Access-Control-Allow-Origin', 'http://mytest.com');
//多個地址跨域訪問
//跨域訪問的時候才會存在此欄位
$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
$allow_origin = array(
'http://www.a.com',
'http://www.b.com'
);
if(in_array($origin, $allow_origin)){
$response->header('Access-Control-Allow-Origin',$origin);
}
注:到這裡還沒完,中介軟體建立了,我們還要加到\app\Http\Kernel.php裡面去,不然不能生效。
這時候就有選擇了,加到全域性還是routeGroup?這個就取決於你的應用了,如果你的應用完全是介面,而且都是跨域,name就加到global那裡去。
如果你是某幾個介面需要跨域,就寫到下面那個routeMiddle裡面去。
然後用的時候就在路由裡面加上這個中介軟體的別名即可。