1. 程式人生 > >Laravel 5.5 跨域 中介軟體

Laravel 5.5 跨域 中介軟體

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裡面去。

然後用的時候就在路由裡面加上這個中介軟體的別名即可。