我们在用 laravel 进行开发的时候,特别是前后端完全分离的时候,由于前端项目运行在自己机器的指定端口 (也可能是其他人的机器) , 例如 localhost:8000 , 而 laravel 程序又运行在另一个端口,这样就跨域了,而由于浏览器的同源策略,跨域请求是非法的。其实这个问题很好解决,只需要添加一个中间件就可以了。
- 新建一个中间件
php artisan make:middleware EnableCrossRequestMiddleware - 书写中间件内容
-
<?php -
namespace App\Http\Middleware; -
use Closure; -
class EnableCrossRequestMiddleware -
{ -
/** -
* Handle an incoming request. -
* -
* @param \Illuminate\Http\Request $request -
* @param \Closure $next -
* @return mixed -
*/ -
public function handle($request, Closure $next) -
{ -
$response = $next($request); -
$origin = $request->server('HTTP_ORIGIN') ? $request->server('HTTP_ORIGIN') : ''; -
$allow_origin = [ -
'http://localhost:8000', -
]; -
if (in_array($origin, $allow_origin)) { -
$response->header('Access-Control-Allow-Origin', $origin); -
$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN'); -
$response->header('Access-Control-Expose-Headers', 'Authorization, authenticated'); -
$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS'); -
$response->header('Access-Control-Allow-Credentials', 'true'); -
} -
return $response; -
} -
}
$allow_origin数组变量就是你允许跨域的列表了,可自行修改。 -
- 然后在内核文件注册该中间件
-
protected $middleware = [ -
// more -
App\Http\Middleware\EnableCrossRequestMiddleware::class, -
];
在
App\Http\Kernel类的$middleware属性添加,这里注册的中间件属于全局中间件。 -
然后你就会发现前端页面已经可以发送跨域请求了。
来源:oschina
链接:https://my.oschina.net/u/3371661/blog/3165080