📅  最后修改于: 2023-12-03 14:39:13.031000             🧑  作者: Mango
如果你在使用 Angular 和 Laravel 构建 Web 应用程序时碰到 CORS (跨来源资源共享) 错误,请不要惊慌,这在开发中是一种很常见的情况。
CORS 是一种跨域资源共享机制,允许 JavaScript 发起跨域请求,从而在浏览器中使网页能够获取对不同来源服务器上的资源的访问权限。如果对客户端进行 CORS 操作,则将允许客户端访问跨域请求。
如果在用 Angular 向 Laravel 发送请求时,返回的响应头没有包含 Access-Control-Allow-Headers 字段,则会出现此错误。这是因为浏览器在发送跨域请求时,会首先发送一个 OPTIONS 请求(Preflight Request)来询问服务器是否允许请求。
如果服务器响应头中没有或不包含 Access-Control-Allow-Headers,浏览器就会报错并拒绝响应。
要解决这个问题,只需在 Laravel 应用程序中添加中间件使其响应 OPTIONS 请求,同时将 Access-Control-Allow-Headers 字段添加到响应头中。
<?php
namespace App\Http\Middleware;
use Closure;
class CORS
{
public function handle($request, Closure $next)
{
$headers = [
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'GET, POST, PUT, PATCH, DELETE, OPTIONS',
'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With'
];
if ($request->isMethod('OPTIONS')) {
return response()->json('', 200, $headers);
}
$response = $next($request);
foreach ($headers as $key => $value) {
$response->header($key, $value);
}
return $response;
}
}
protected $middlewareGroups = [
...
'cors' => \App\Http\Middleware\CORS::class,
...
];
cors
中间件作为 Laravel 应用程序的全局中间件,因此它将适用于你的整个应用程序:protected $middleware = [
...
\App\Http\Middleware\CORS::class,
...
];
这些步骤将修复 Angular 和 Laravel 之间的跨域请求问题,并使你能够在浏览器中成功访问你的 API。