在预检响应vue-laravel App中,Access-Control-Allow-Methods不允许使用方法PUT

时间:2018-05-22 08:02:07

标签: laravel vue.js axios

我是vue的新人。对于ajax请求,我使用的是axios,对于后端,我使用的是Laravel。每当我发送POST和GET请求时,它都可以正常工作。但是在尝试发送 PUT 请求时,预检响应vue-laravel App中的Access-Control-Allow-Methods不允许显示方法PUT。我在Stackoverflow和github上读过很多答案但是没有一个能为我工作。

以下是客户端代码:

KafkaUtils.createDirectStream[String, String](
    ssc,
    PreferConsistent,
    Subscribe[String, String](Seq(metaInfoTopic), metaInformationKafkaParamas)
)

这是CROSS中间件代码:

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;
   });

2 个答案:

答案 0 :(得分:0)

特定的GET,HEAD和POST HTTP请求不会触发CORS预检OPTIONS检查。它们被称为简单请求。它们只发送HTTP头的子集。任何其他附加标头,如Authorization标头(想想JWT认证),都会触发预检OPTIONS请求。有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

我认为最简单的方法是使用后端的laravel-cors包(参见https://github.com/barryvdh/laravel-cors)。

在进行开发时,您可以通过将allowedOrigins,allowedHeaders和allowedMethods设置为*来实现非常宽松。稍后,在测试和随后的生产过程中,您应该将其调整为更严格。到那时,您将拥有更好的CORS概念,然后您可以完全根据您的需求进行配置。

答案 1 :(得分:0)

在后端尝试: 应用程序/ HTTP /中间件/ 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 array add

'cors' => \App\Http\Middleware\Cors::class,

路线/ api.php     Route :: group(['middleware'=>'cors'],function(){

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

});