下面由laravel框架教程栏目给大家介绍laravel api允许跨域访问,希望对需要的朋友有所帮助!
服务器a请求服务器b的接口,那么一般会出现跨域问题。全解跨域请求处理办法xmlhttprequest cannot load http://api.console.vms3.com/api/user. no 'access-control-allow-origin' header is present on the requested resource. origin 'http://localhost:8080' istherefore not allowed access.
意思就是服务器响应不允许跨域访问.
那我们就需要让服务器支持跨域访问, 也就是在响应头部中添加
'access-control-allow-origin: *'
第一步: 创建中间件创建 `app/http/middleware/accesscontrolalloworigin.php` middleware 把 'access-control-allow-origin: *' 写入头部.app/http/middleware/accesscontrolalloworigin.php<?phpnamespace app\http\middleware;use closure;use illuminate\support\facades\auth;class accesscontrolalloworigin{ /** * * handle an incoming request. * * @param \illuminate\http\request $request * @param \closure $next * @return mixed */ public function handle($request, closure $next) { header('access-control-allow-origin: *'); header(access-control-allow-credentials: true); header(access-control-allow-methods: *); header(access-control-allow-headers: content-type,access-token); header(access-control-expose-headers: *); return $next($request); }}
第二步: 注册路由注册这个 middleware 到 kernel 中.
分别在 protected $middleware 数组中和 protected $routemiddleware 数组中
添加我们刚才创建的那个文件class名, 使用 cors 这个别名.
第三步: 设置中间件保护接口然后在设置它保护 api , 就是$middlewaregroups['api'] 的数组中添加它的别名, 本文中是 'cors'
app/http/kernel.php
<?phpnamespace app\http;use illuminate\foundation\http\kernel as httpkernel;class kernel extends httpkernel{ /** * the application's global http middleware stack. * * these middleware are run during every request to your application. * * @var array */ protected $middleware = [ \illuminate\foundation\http\middleware\checkformaintenancemode::class, \illuminate\foundation\http\middleware\validatepostsize::class, \app\http\middleware\trimstrings::class, \illuminate\foundation\http\middleware\convertemptystringstonull::class, \app\http\middleware\accesscontrolalloworigin::class, ]; /** * the application's route middleware groups. * * @var array */ protected $middlewaregroups = [ 'web' => [ \app\http\middleware\encryptcookies::class, \illuminate\cookie\middleware\addqueuedcookiestoresponse::class, \illuminate\session\middleware\startsession::class, // \illuminate\session\middleware\authenticatesession::class, \illuminate\view\middleware\shareerrorsfromsession::class, \app\http\middleware\verifycsrftoken::class, \illuminate\routing\middleware\substitutebindings::class, ], 'api' => [ 'throttle:60,1', 'bindings', 'cors' ], ]; /** * the application's route middleware. * * these middleware may be assigned to groups or used inpidually. * * @var array */ protected $routemiddleware = [ 'auth' => \illuminate\auth\middleware\authenticate::class, 'auth.basic' => \illuminate\auth\middleware\authenticatewithbasicauth::class, 'bindings' => \illuminate\routing\middleware\substitutebindings::class, 'can' => \illuminate\auth\middleware\authorize::class, 'guest' => \app\http\middleware\redirectifauthenticated::class, 'throttle' => \illuminate\routing\middleware\throttlerequests::class, 'cors' => \app\http\middleware\accesscontrolalloworigin::class, ];}
第四步:在路由中添加路由route::middleware('cors')->group(function () { //});
以上就是详解laravel api允许跨域访问的详细内容。