📌  相关文章
📜  laravel 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头存在 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:14.568000             🧑  作者: Mango

Laravel 对预检请求的响应未通过访问控制检查

当我们使用 Laravel 并在客户端发送 XMLHttpRequest 请求时,有时可能会遇到预检请求未通过访问控制检查的错误,该错误的信息通常是“没有“Access-Control-Allow-Origin”标头存在”。

这个错误通常出现在客户端与服务端接口的跨域访问过程中,其原因是浏览器对跨域请求进行了安全性限制,需要服务端给出 CORS 跨域相关的响应头,告知浏览器该跨域请求是被允许的。

在 Laravel 中,我们可以通过 middleware 来设置 CORS 相关的响应头,以解决这一问题。

解决方法

我们可以使用 Laravel 自带的 Cors 中间件来解决此问题。该中间件会在每个响应头中添加允许跨域请求的相关头信息。

在 Laravel 5.2 及以上版本中,我们只需要在路由组中添加 Cors 中间件即可,如下所示:

Route::group(['middleware' => 'cors'], function () {
    // 相关路由
});

对于 Laravel 5.1 及以下版本的项目,我们可以手动创建一个中间件来实现该功能,如下所示:

namespace App\Http\Middleware;

use Closure;

class Cors
{
    /**
     * 处理跨域请求
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request)
            ->header('Access-Control-Allow-Origin', '*')
            ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    }
}

然后在路由中使用该中间件即可,如下所示:

Route::group(['middleware' => 'cors'], function () {
    // 相关路由
});
总结

对于 Laravel 中出现的“没有“Access-Control-Allow-Origin”标头存在”错误,我们可以通过设置 CORS 相关的响应头来解决该问题。我们可以使用 Laravel 自带的 Cors 中间件来完成该功能或手动创建一个 Cors 中间件。