2017-04-22 38 views
1

XMLHttpRequest无法加载http://myapi/api/rating。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。因此不允许访问原产地'http://localhost:8104'。该响应的HTTP状态代码403.否'Access-Control-Allow-Origin'标头 - Laravel 5.4

我不明白为什么我不能做CORS请求。我已经在这里安装了中间件,将它添加到全局http内核中,但它仍然不起作用。试图创建一个定制的中间件给出的stackoverflow建议,但也没有奏效。还尝试添加一个路由组。最后,我尝试在请求操作中手动设置响应头。我真的被卡住了 - 帮助表示感谢!

请参见下面的代码:https://gist.github.com/KerryRitter/0d7ababb7b9eb8d54f0ae55add9704a1

+0

简单,使用这个插件:https://github.com/barryvdh/laravel-cors – num8er

+0

我这样做,那是我提到的中间件(忘了说)。我添加到内核中,看看我的要点 –

+0

要如何保持它:''middleware'=> [\ Barryvdh \ Cors \ HandleCors :: class]' – num8er

回答

2

https://github.com/barryvdh/laravel-cors

的laravel-CORS包允许您使用Laravel中间件配置发送跨来源资源共享头。

特点

把手CORS飞行前的请求OPTIONS再添 CORS标头到您的答复

+0

解决了我的问题:我没有将“Barryvdh \ Cors \ ServiceProvider :: class”添加到config/app.php提供程序数组中。 –

1

我最近面临laravel 5.4这个错误,我会发送AJAX POST请求到自己的网站,并仍然得到同样的错误,我遇到这个错误是由于两个原因准确地说,

error: XMLHttpRequest cannot load https://[mydomain].com/quote/short. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://[mydomain].com' is therefore not allowed access.

原因上面的错误是,我张贴请求HTTP域从https域,所以当我把它变成https,错误就解决了,后来我又得到了相同的由于类似原因导致的错误,这是原因,这次该域名有www.和要求的一个没有,我加了www.后,它的工作就像一个魅力。

而对于跨源请求,我用以下溶液:

  1. 创建一个中间件(在我的情况CORS)具有代码下面

    return $next($request) 
        ->header('Access-Control-Allow-Origin', '*') 
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); 
    
  2. 插入中间件成routeMiddleware阵列in kernal.php

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

  3. 添加中间件的尊重路线

    Route::get('myRoute', ['middleware' => 'cors' , 'uses'=> '[email protected]']

希望这个答案可以帮助别人面临着同样的问题,因为我自己。