前言
眾所周知我們大家在用 laravel 進(jìn)行開(kāi)發(fā)的時(shí)候,特別是前后端完全分離的時(shí)候,由于前端項(xiàng)目運(yùn)行在自己機(jī)器的指定端口(也可能是其他人的機(jī)器) , 例如 localhost:8000 , 而 laravel 程序又運(yùn)行在另一個(gè)端口,這樣就跨域了,而由于瀏覽器的同源策略,跨域請(qǐng)求是非法的。其實(shí)這個(gè)問(wèn)題很好解決,只需要添加一個(gè)中間件就可以了。下面話不多說(shuō)了,來(lái)隨著小編一起看看詳細(xì)的解決方案吧。
解決方案:
1、新建一個(gè)中間件
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)核文件注冊(cè)該中間件
protected $middleware = [
// more
App\Http\Middleware\EnableCrossRequestMiddleware::class,
];
在 App\Http\Kernel 類的 $middleware 屬性添加,這里注冊(cè)的中間件屬于全局中間件。
然后你就會(huì)發(fā)現(xiàn)前端頁(yè)面已經(jīng)可以發(fā)送跨域請(qǐng)求了。
會(huì)多出一次 method 為 options 的請(qǐng)求是正常的,因?yàn)闉g覽器要先判斷該服務(wù)器是否允許該跨域請(qǐng)求。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
您可能感興趣的文章:- Laravel獲取當(dāng)前請(qǐng)求的控制器和方法以及中間件的例子
- laravel請(qǐng)求參數(shù)校驗(yàn)方法
- 解決在Laravel 中處理OPTIONS請(qǐng)求的問(wèn)題
- Laravel開(kāi)啟跨域請(qǐng)求的方法