首頁 >php框架 >Laravel >laravel怎麼設定跨域(兩種方法)

laravel怎麼設定跨域(兩種方法)

PHPz
PHPz原創
2023-04-08 15:30:023418瀏覽

在前後端分離的專案中,前端請求後端介面時可能會遇到跨域的問題。其中,一個典型的場景是:前端專案運行在 http://localhost:8080,而後端專案運行在 http://localhost:8000,這時候就需要設定跨域。

在 Laravel 中,要設定跨域可以採用以下兩種方法。

  1. 中介軟體方式

先建立一個中介軟體CorsMiddleware:

php artisan make:middleware CorsMiddleware

在CorsMiddleware 中處理跨域:

<?php

namespace App\Http\Middleware;

use Closure;

class CorsMiddleware
{
    public function handle($request, Closure $next)
    {
        $origin = $request->header('Origin') ?: '*';

        header('Access-Control-Allow-Origin: ' . $origin);
        header('Access-Control-Allow-Headers: Origin, Content-Type, Authorization');
        header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');

        return $next($request);
    }
}

該中間件會在Http/Kernel.php 中的$middleware 陣列中註冊:

protected $middleware = [
    // ...
    \App\Http\Middleware\CorsMiddleware::class,
];

這時候Laravel 會在回應頭中加入Access-Control-Allow-Origin 等跨網域相關的資訊。

  1. Laravel-cors 擴充包

其實,Laravel 社群已經有許多開源擴充包可以用來處理跨域問題。例如,laravel-cors,它提供了一些設定項來設定跨域請求。

首先,安裝擴充功能:

composer require barryvdh/laravel-cors

接著,在config/app.php 中的providers 陣列中註冊服務提供者:

'providers' => [
    // ...
    Barryvdh\Cors\ServiceProvider::class,
],

最後,發布設定檔:

php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"

這時候,可以在config/cors.php 中設定跨網域請求:

return [

    /*
    |--------------------------------------------------------------------------
    | Laravel CORS Options
    |--------------------------------------------------------------------------
    |
    | The allowed_methods and allowed_headers options are case-insensitive.
    |
    */

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'allowed_methods' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => false,

];

依照需求進行對應的設定即可。

以上就是在 Laravel 中設定跨域的兩種方法,選擇一種適合自己的方法。

以上是laravel怎麼設定跨域(兩種方法)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn