cors 中间件并在 post api 上出错

Posted

技术标签:

【中文标题】cors 中间件并在 post api 上出错【英文标题】:cors middleware and get error on post api 【发布时间】:2022-01-17 19:51:21 【问题描述】:

我制作了一个 cors 中间件并将其设置为所有 api 以防止 cors error 这是我的中间件:

$response = $next($request);
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, DELETE, PATCH, PUT');
$response->headers->set('Access-Control-Allow-Headers', 'Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type');
$response->headers->set('Access-Control-Allow-Credentials', 'true');
return $response;

我的问题是标题似乎仅适用于 GET api,并且在发布 api 时我得到cors error

nginx 端是否有任何配置甚至 vue js api 调用来解决此问题?

【问题讨论】:

【参考方案1】:

如果你想以正确的方式处理 cors, 最好安装fruitcake/laravel-cors包,然后放这个:

\Fruitcake\Cors\HandleCors::class,

App\Http\Kernel.php 中像这样:

protected $middleware = [
        \Fruitcake\Cors\HandleCors::class,
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];


【讨论】:

有具体的配置吗? 这个包有一个配置文件,当你使用publish:vendor时,它会在config目录中创建,在这个文件中,像这样设置path就足够了:```'paths'= > ['api/*'] ``` 我测试过,标题似乎相同。但只是包装有效。为什么? 我真的不知道,几个月前我遇到了这个问题,我已经用这个包解决了。

以上是关于cors 中间件并在 post api 上出错的主要内容,如果未能解决你的问题,请参考以下文章

Ajax POST 到 Laravel API 偶尔会被 CORS 阻止

CORS 中间件适用于 app.get 但不适用于 app.post

CORS 中间件在 nodeJS 中不起作用

.Net Core 3.0 Api json web token 中间件签权验证和 CORS 中间件处理跨域请求

本地 Javascript Fetch Post 请求失败,调用 ASP.NET Core 2.2 Web API。 CORS 已启用

在使用 node.js 和 Express 构建的 api 中使用 cors 中间件时出现 CORS 错误