路由在api.php中:

Route::group(['middleware' => ['cors']], function () {
    Route::post('/xxx', "Api\xxxController@xxx");
});

定义中间件CorsMiddleware

定义位置:

app/Http/Middleware/CorsMiddleware.php

CorsMiddleware内容

<?php

namespace App\Http\Middleware;

use Closure;

class CorsMiddleware
{
    /**
     * 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://xxx.com',//可允许访问的域名
        ];
        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;
或者是
        if ($request->isMethod('OPTIONS')) {
            $response = response('', 200);
        } else {
            $response = $next($request);
        }
        if (!method_exists($response, 'header')) {
            return $response;
        }
        $response->header('Access-Control-Allow-Methods', 'HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS');
        $response->header(
            'Access-Control-Allow-Headers',
            'Origin, Content-Type, Content-Length, Cookie, X-CSRF-TOKEN, X-Requested-With, Accept, Authorization, X-XSRF-TOKEN, Token'
        );
        $response->header('Access-Control-Allow-Origin', '*');
        $response->header('Access-Control-Max-Age', 86400);
        return $response;
    }
}

 

在app/Http/Kernel.php文件的$middleware中添加这个中间件

protected $middleware = [
    .........,
    \App\Http\Middleware\CorsMiddleware::class//加入此句

];

$routeMiddleware中添加

protected $routeMiddleware = [
        ......,
        'cors'=> \App\Http\Middleware\CorsMiddleware::class
];

$middlewareGroups中添加

protected $middlewareGroups = [
        'web' => [
            .......
        ],
        'token' => [
            ......
        ],

        'api' => [
            ..........,
            'cors',//加入此句
        ],
    ];

参考:https://blog.csdn.net/qq_32080545/article/details/84641826

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐