在Lumen API上启用CORS

问题描述 投票:0回答:3

我知道这是一个已知的问题,但是我已经尝试了几乎所有内容,但我仍然坚持下去。我有一个结构如下的简单项目:

                [Client]       =>     [Gateway]       =>      [API] 
                Laravel 6              Lumen 6               Lumen 6
             localhost:8000         localhost:8001       localhost:8002

由于我刚刚开始从事这个项目,只是为了证明这项工作是否有效,因此我已禁用所有auth内容。

在我的[[API]]上,我在public中有一个名为uploads的文件夹(基本上在http://localhost:8002/uploads/audio.amr中),其中有1个音频文件(.amr),我正尝试从客户端视图播放它。由于html无法播放.amr文件,因此我不得不使用插件。我正在使用此BenzAMRRecorder

[客户端]我进行了ajax请求以获取音频文件的URL。

client

通过枪口连接到gateway,并且gateway也使用API进行连接,我成功获得了URL http://localhost:8002/uploads/audio.amr $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $.ajax({ url : 'client/get_url_audio', type : 'GET', data : { }, dataType:'json', success : function(data) { /** Here's the way to play the file */ var amr = new BenzAMRRecorder(); amr.initWithUrl(data['url']).then(function() { amr.play(); }); }, });
我成功获取了URL,但是当

BenzAMRRecorder

尝试访问URL http://localhost:8002/uploads/audio.amr时,出现了此错误:

错误:

已从CORS策略阻止从原点http://localhost:8002/uploads/audio.amr访问'http://localhost:8000处的XMLHttpRequest:在请求的资源上没有'Access-Control-Allow-Origin'标头。

我已经阅读了很多方法来解决此问题,并在

API

上添加了CorsMiddleware并带有句柄功能,如下所示:
public function handle($request, Closure $next) { $headers = [ 'Access-Control-Allow-Origin' => '*', 'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE', 'Access-Control-Allow-Credentials' => 'true', 'Access-Control-Max-Age' => '86400', 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With' ]; if ($request->isMethod('OPTIONS')) { return response()->json('{"method":"OPTIONS"}', 200, $headers); } $response = $next($request); foreach($headers as $key => $value) { $response->header($key, $value); } return $response; }
然后在bootstrap/app.php上添加

$app->middleware([ App\Http\Middleware\Cors::class ]);

但是我仍然遇到相同的错误。我想的是,当方法amr.initWithUrl(data['url'])访问API文件夹时,它不会进入中间件,并且尝试在没有经过中间件的情况下尝试访问

direct

到文件夹,但是我不知道为什么。有人可以帮我解决这个问题吗?
编辑:我也尝试过github.com/barryvdh/laravel-cors

我知道这是一个已知的问题,但是我已经尝试了几乎所有内容,但我仍然坚持下去。我有一个简单的项目,其结构如下:[Client] => [Gateway] => ...

ajax laravel lumen
3个回答
0
投票
在服务器中的.htaccess文件中添加以下内容,该文件包含您尝试访问的资源:

0
投票
我不知道它是否可以在流明中工作,但是对于Laravel,使用此neomerx/cors包已经取得了很多成功。

0
投票
您可能错过了CORS中间件中的标头X-CSRF-TOKEN
© www.soinside.com 2019 - 2024. All rights reserved.