【问题标题】:Laravel handling CORS Options requestsLaravel 处理 CORS 选项请求
【发布时间】:2018-07-24 23:21:27
【问题描述】:

我正在尝试制作一个小的 API,我可以在没有失败或错误的情况下获得选项请求。 我做了这个中间件:

public function handle($request, Closure $next)
{
    if ($request->method() === 'OPTIONS') {
        $headers = [
            'Access-Control-Allow-Origin' => '*',
            'Access-Control-Allow-Methods'=>'POST, GET, OPTIONS, PUT, DELETE'
        ];
        return (new Response(' ', 200))
            ->withHeaders($headers);
    }
    else {
        return $next($request);
    };
}

我的web.php

$router->get('/', function () use ($router) {
return $router->app->version();
});
$router->get('/cors', 'CorsController@index');

当我使用邮递员发送请求时,它会在响应中添加标头。但是,但是任何选项请求都会得到 200 响应,并且不会被重定向或任何东西。

之前我尝试在我的中间件中这样做:

public function handle($request, Closure $next)
{
    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS');
}

但这总是抛出一个MethodNotAllowedError

当我创建一个新内容时,我也会使用我的请求内容。 我的问题是如何在 laravel 中正确处理带有 CORS 的选项请求,它不会抛出错误并且我不会丢失我的请求内容?

【问题讨论】:

    标签: laravel cors


    【解决方案1】:

    试试这个:

    public function handle($request, Closure $next)
    {
        if($request->getMethod() == 'OPTIONS'){
    
            header('Access-Control-Allow-Origin: *');
            header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE');
            header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization');
            header('Access-Control-Allow-Credentials: true');
            exit(0);
        }
        return $next($request);
    }
    

    【讨论】:

    • 这也返回了很好的响应,但它退出到一个空白页面,我不确定这是否正确。
    • 我刚刚得知这是飞行前请求,所以应该是这样。还是谢谢。
    猜你喜欢
    • 2019-08-29
    • 2018-03-26
    • 2014-08-16
    • 2020-06-30
    • 2014-08-26
    • 2020-06-30
    • 2017-12-12
    • 2017-03-01
    • 2019-02-08
    相关资源
    最近更新 更多