首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel处理CORS选项请求

Laravel处理CORS选项请求
EN

Stack Overflow用户
提问于 2018-02-14 19:37:15
回答 1查看 5.2K关注 0票数 1

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

代码语言:javascript
复制
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

代码语言:javascript
复制
$router->get('/', function () use ($router) {
return $router->app->version();
});
$router->get('/cors', 'CorsController@index');

当我使用postman发送请求时,这是可以的,它会向响应添加报头。但是,任何options请求都将得到200响应,并且不会被重定向或做任何事情。

早些时候,我尝试在我的中间件中做到这一点:

代码语言:javascript
复制
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的options请求,这样就不会抛出错误,也不会丢失我的请求内容?

EN

回答 1

Stack Overflow用户

发布于 2018-02-14 19:40:29

试试这个:

代码语言:javascript
复制
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);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48786290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档