Laravel 5.7 No 'Access-Control-Allow-Origin' header is present on the request resource


前后端項目跨域訪問時會遇到此問題,解決方法如下:

創建一個中間件

php artisan make:middleware EnableCrossRequestMiddleware

該中間件的文件路徑為:app/Http/Middleware/EnableCrossRequestMiddleware.php

中間件 EnableCrossRequestMiddleware 內容如下:

<?php
/**
 * 跨域設置
 */

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Response;

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 = config('origin.allowed');

        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;
    }
}

app/Http/Kernal.php 文件中將其注冊為全局中間件

namespace App\Http;

use App\Http\Middleware\AuthenticateMain;
use App\Http\Middleware\AuthenticateSeller;
use App\Http\Middleware\AuthenticateUser;
use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\EnableCrossRequestMiddleware::class, // 添加這一行將其注冊為全局中間件
    ];
}

增加配置文件app/config/origin.php,內容為允許的域名

<?php
return [

    'allowed' => [
        'http://test.example.com',
        'http://test-fe.example.com:8080'
    ]

];

PS - 個人博客原文:Laravel 5.7 No 'Access-Control-Allow-Origin' header is present on the request resource


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM