前言
眾所周知我們大家在用 laravel 進(jìn)行開發(fā)的時候,特別是前后端完全分離的時候,由于前端項目運行在自己機器的指定端口(也可能是其他人的機器) , 例如 localhost:8000 , 而 laravel 程序又運行在另一個端口,這樣就跨域了,而由于瀏覽器的同源策略,跨域請求是非法的。其實這個問題很好解決,只需要添加一個中間件就可以了。下面話不多說了,來隨著小編一起看看詳細(xì)的解決方案吧。
解決方案:
1、新建一個中間件
php artisan make:middleware EnableCrossRequestMiddleware
2、書寫中間件內(nèi)容
?php namespace App\Http\Middleware; use Closure; class EnableCrossRequestMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $response = $next($request); $origin = $request->server('HTTP_ORIGIN') ? $request->server('HTTP_ORIGIN') : ''; $allow_origin = [ 'http://localhost:8000', ]; if (in_array($origin, $allow_origin)) { $response->header('Access-Control-Allow-Origin', $origin); $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN'); $response->header('Access-Control-Expose-Headers', 'Authorization, authenticated'); $response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS'); $response->header('Access-Control-Allow-Credentials', 'true'); } return $response; } }
$allow_origin 數(shù)組變量就是你允許跨域的列表了,可自行修改。
3、然后在內(nèi)核文件注冊該中間件
protected $middleware = [ // more App\Http\Middleware\EnableCrossRequestMiddleware::class, ];
在 App\Http\Kernel 類的 $middleware 屬性添加,這里注冊的中間件屬于全局中間件。
然后你就會發(fā)現(xiàn)前端頁面已經(jīng)可以發(fā)送跨域請求了。
會多出一次 method 為 options 的請求是正常的,因為瀏覽器要先判斷該服務(wù)器是否允許該跨域請求。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
標(biāo)簽:定西 十堰 樂山 南寧 海南 迪慶 六安 佛山
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《laravel開發(fā)中跨域的解決方案》,本文關(guān)鍵詞 laravel,開發(fā),中跨,域,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。