最方便的方法,新建一個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'); // $response->header('Access-Control-Allow-Credentials', 'true'); return $response; }
其中有以下需要注意的地方:
- 對於跨域訪問並需要伴隨認證信息的請求,需要在 XMLHttpRequest 實例中指定 withCredentials 為 true。
- 這個中間件你可以根據自己的需求進行構建,如果需要在請求中伴隨認證信息(包含 cookie,session)那么你就需要指定 Access-Control-Allow-Credentials 為 true, 因為對於預請求來說如果你未指定該響應頭,那么瀏覽器會直接忽略該響應。
- 在響應中指定 Access-Control-Allow-Credentials 為 true 時,Access-Control-Allow-Origin 不能指定為 *(這個一定要注意,我就是在這個地方調了好久)
- 后置中間件只有在正常響應時才會被追加響應頭,而如果出現異常,這時響應是不會經過中間件的
意思是允許所有的域都能訪問這個接口。但是這時候不能傳遞session和cookie,如果想要指定域名來訪問,就這樣寫:
$response->header('Access-Control-Allow-Origin', 'http://mytest.com');
這個意思就是只允許http://mytest.com來訪問這個接口。
到這里還沒完,中間件建立了,我們還要加到\app\Http\Kernel.php里面去,不然不能生效。 這時候就有選擇了,加到全局還是routeGroup?這個就取決於你的應用了,如果你的應用完全是接口,而且都是跨域,name就加到global那里去。如下圖所示:
如果你是某幾個接口需要跨域,就寫到下面那個routeMiddle里面去。

然后用的時候就在路由里面加上這個中間件的別名即可。 原文:https://blog.csdn.net/zhezhebie/article/details/78068009
第二種方法:
場景
laravel作為后端API使用的時候,前端ajax請求的時候 遇到跨域的問題
解決
laravel5.5 barryvdh/laravel-cors 使用方法很簡單
composer require barryvdh/laravel-cors
app/Http/Kernel.php 添加
protected $middleware = [ \Barryvdh\Cors\HandleCors::class];
這時候ajax 訪問就可以沒有跨域的問題了
---------------------
原文:https://blog.csdn.net/cominglately/article/details/80381567