飞行前响应vue laravel应用程序中的访问控制允许方法不允许方法PUT

飞行前响应vue laravel应用程序中的访问控制允许方法不允许方法PUT,laravel,vue.js,axios,Laravel,Vue.js,Axios,我是vue的新手。对于ajax请求,我使用axios;对于后端,我使用Laravel。无论何时我发送邮件并收到请求,它都可以正常工作。但在尝试发送PUT请求时,飞行前响应vue laravel应用程序中的访问控制允许方法不允许其显示方法PUT。我在Stackoverflow和github中读到了很多答案,但没有一个对我有用 以下是客户端代码: axios.put('http://127.0.0.1:8000/api/photo/6', this.photo, { headers: getHead

我是vue的新手。对于ajax请求,我使用axios;对于后端,我使用Laravel。无论何时我发送邮件并收到请求,它都可以正常工作。但在尝试发送PUT请求时,飞行前响应vue laravel应用程序中的访问控制允许方法不允许其显示方法PUT。我在Stackoverflow和github中读到了很多答案,但没有一个对我有用

以下是客户端代码:

axios.put('http://127.0.0.1:8000/api/photo/6', this.photo, { headers: getHeader() })
    .then(response => {
        console.log(response.data.message);
   }).catch(err => {
        this.errors = err.response.data.errors;
   });
以下是跨中间件代码:

//allowed client 
    //now only for localhost vue cli
    $domains = ['http://localhost:8080'];

    if(isset($request->server()['HTTP_ORIGIN'])){

        $origin = $request->server()['HTTP_ORIGIN'];

        if(in_array($origin, $domains)){
            header('Access-Control-Allow-Origin: '.$origin);
            header('Access-Control-Allow-Headers: Origin, Content-Type, Authorization');
        }
    }

    return $next($request);

特定的GET、HEAD和POST HTTP请求不会触发CORS飞行前选项检查。它们被称为简单请求。它们只发送HTTP头的子集。任何其他额外的头,比如授权头,比如JWT身份验证,都将触发飞行前选项请求。有关详细信息,请访问

我认为最简单的方法是在后端使用laravel cors包

在进行开发时,只需将AllowedOrigination、AllowedHeader和allowedMethods设置为*,您就可以非常宽容。稍后,在测试和随后的生产过程中,您应该将其调整为更严格。到那时,您将更好地掌握CORS概念,然后您可以根据需要对其进行充分配置。

在后端尝试以下方法: app/Http/Middleware/Cors.php

public function handle($request, Closure $next)
{
return $next($request)
    ->header('Access-Control-Allow-Origin', '*')
    ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, 
OPTIONS');
}
app/Http/Kernel.php$routedMiddleware数组添加

'cors' => \App\Http\Middleware\Cors::class,
Route/api.php 路由::组['middleware'=>'cors'],函数{

Route::put('/v1/employees', 'Employees@store');

})

这是你的服务器配置在起作用。仔细看看你的错误,它提到了访问控制允许方法,现在看看你的服务器代码,你缺少了一行发送此标题的代码。我还将此行添加到我的CROS中间件标题“访问控制允许方法:”,POST,GET,PUT,DELETE,OPTIONS;结果仍然是一样的