laravel cross domain - laravel跨域解决方案以及如何实现跨域请求
我们在用 laravel 进行开发的时候,特别是前后端完全分离的时候,由于前端项目运行在自己机器的指定端口 (也可能是其他人的机器) , 例如 localhost:8000 , 而 laravel 程序又运行在另一个端口,这样就跨域了,而由于浏览器的同源策略,跨域请求是非法的。其实这个问题很好解决,只需要添加一个中间件就可以了。
中间件代码如下
<?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);
$httpWay = config('app.env') == 'local' ? 'http://' : 'https://';
$domain = config('routes.H5_HOST', 'm.xxx.com');
$response->header('Access-Control-Allow-Origin', $httpWay . $domain);
$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;
}
}
然后在App\Http\Kernel.php中添加对应的配置就可以了
我的是在
protected $routeMiddleware = [
// ...
'cross.domain' => \App\Http\Middleware\EnableCrossRequestMiddleware::class,
]
这个地方加入的中间件配置
使用的话在路由中直接调用就可以了
// api
Route::group(['domain' => config('routes.API_HOST', 'api.xx.com')], function () {
Route::group([
'middleware' => [
'cross.domain',
],
'prefix' => '/api',
'namespace' => 'XXX',
], function () {
Route::post('/xxx/xx', 'xxxController@index');
});
});
这样就实现了给指定的接口添加跨域处理的逻辑了
只是补充
1,如何创建中间件
php artisan make:middleware EnableCrossRequestMiddleware
版权声明
由 durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 博客( https://www.gowhich.com ),版权所有,侵权必究。
版权声明
由 durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 Gowhich博客( https://www.gowhich.com ),版权所有,侵权必究。