错误 - 跨源请求错误



我正在用 php 开发一个带有 laravel 框架的 api,它返回 ionic 应用程序的记录。所以问题是我发送图像和文件路径,并且应用程序在尝试下载带有cross origin error的文件时出错。

该方法发送如下所示的 json:

[{
"name": "Braga",
"ref": "6903",
"cover": "/images/uploads/0_C6903_597614930f57e.jpg",
"coverDetail": "/images/uploads/0_D6903_597614930f599.jpg",
"pdf": "/images/uploads/0_P6903_597614930f5b0.epub",
"companyId": "0"
}]

我还有另一种获取文件的方法(路径(:

public function getFile($url){
$file= public_path(). $url;
$headers = array(
'Content-Type: application/epub',
);
return Response::download($file, '', $headers);}

如果在浏览器上使用它,它可以工作,它会将文件下载到我的笔记本电脑,但是当我尝试将文件发送到应用程序时,它会给我cross origin error.

搜索后,我更新了我的.htaccess添加以下行:

<IfModule mod_headers.c>
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Access-Control-Allow-Origin"
Header always set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
</IfModule>

如何解决这个问题?

谢谢

通过打开终端或 Windows cmd 命令在 laravel 中创建新middleware

php artisan make:middleware CorsMiddleware

或者您想使用的任何名称

并把这个代码

<?php
namespace AppHttpMiddleware;
use Closure;
class CorsMiddleware
{
/**
* Handle an incoming request.
*
* @param  IlluminateHttpRequest  $request
* @param  Closure  $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$domains = ["http://example.com"];
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);
}
}

使用此Middleware在对应用程序的每个请求期间运行

在目录中打开Kernel.phpHttp并注册您的Middleware

protected $middleware = [
AppHttpMiddlewareCorsMiddleware::class,
]

相关内容

  • 没有找到相关文章

最新更新