第一步:建立允許跨域的中間件
php artisan make:middleware Cors
第二步:加入以下加上請求頭代碼
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;
}
第三步:在Kernel中注冊
注冊中間件
補充:
1.在第三步中注冊會在全局路由生效,如果隻允許局部路由生效,請在$routeMiddleware注冊并在路由處挂上中間件鈎子。
2.上面的頭資訊之中,有三個與CORS請求相關的字段,都以Access-Control-開頭。
(1)Access-Control-Allow-Origin
該字段是必須的。它的值要麼是請求時Origin字段的值,要麼是一個*,表示接受任意域名的請求。
(2)Access-Control-Allow-Credentials
該字段可選。它的值是一個布爾值,表示是否允許發送Cookie。預設情況下,Cookie不包括在CORS請求之中。設為true,即表示伺服器明确許可,Cookie可以包含在請求中,一起發給伺服器。這個值也隻能設為true,如果伺服器不要浏覽器發送Cookie,删除該字段即可。
(3)Access-Control-Expose-Headers
該字段可選。CORS請求時,XMLHttpRequest對象的getResponseHeader()方法隻能拿到6個基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必須在Access-Control-Expose-Headers裡面指定。上面的例子指定,getResponseHeader('FooBar')可以傳回FooBar字段的值。
3.在laravel中,代碼内部報錯,也會導緻請求不能夠傳回,這樣也不能夠拼接上head頭,是以請求依然會報cors報錯