本篇文章給大家?guī)淼膬?nèi)容是關(guān)于laravel api跨域訪問的實(shí)現(xiàn)步驟,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。
服務(wù)器A請(qǐng)求服務(wù)器B的接口,那么一般會(huì)出現(xiàn)跨域問題。
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.
意思就是服務(wù)器響應(yīng)不允許跨域訪問.
那我們就需要讓服務(wù)器支持跨域訪問, 也就是在響應(yīng)頭部中添加
'Access-Control-Allow-Origin: *'
第一步: 創(chuàng)建中間件
創(chuàng)建 `app/Http/Middleware/AccessControlAllowOrigin.php` middleware 把 'Access-Control-Allow-Origin: *' 寫入頭部. app/Http/Middleware/AccessControlAllowOrigin.php <?php namespace AppHttpMiddleware; use Closure; use IlluminateSupportFacadesAuth; class AccessControlAllowOrigin { /** * * Handle an incoming request. * * @param IlluminateHttpRequest $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); } }
第二步: 注冊(cè)路由
注冊(cè)這個(gè) middleware 到 kernel 中.
分別在 protected $middleware ?數(shù)組中和 protected $routeMiddleware 數(shù)組中
添加我們剛才創(chuàng)建的那個(gè)文件class名, 使用 cors 這個(gè)別名.
第三步: 設(shè)置中間件保護(hù)接口
然后在設(shè)置它保護(hù) api , 就是$middlewareGroups[‘api’] 的數(shù)組中添加它的別名, 本文中是 ‘cors’
app/Http/Kernel.php
<?php namespace AppHttp; use IlluminateFoundationHttpKernel 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 = [ IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class, IlluminateFoundationHttpMiddlewareValidatePostSize::class, AppHttpMiddlewareTrimStrings::class, IlluminateFoundationHttpMiddlewareConvertEmptyStringsToNull::class, AppHttpMiddlewareAccessControlAllowOrigin::class, ]; /** * The application's route middleware groups. * * @var array */ protected $middlewareGroups = [ 'web' => [ AppHttpMiddlewareEncryptCookies::class, IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class, IlluminateSessionMiddlewareStartSession::class, // IlluminateSessionMiddlewareAuthenticateSession::class, IlluminateViewMiddlewareShareErrorsFromSession::class, AppHttpMiddlewareVerifyCsrfToken::class, IlluminateRoutingMiddlewareSubstituteBindings::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' => IlluminateAuthMiddlewareAuthenticate::class, 'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class, 'bindings' => IlluminateRoutingMiddlewareSubstituteBindings::class, 'can' => IlluminateAuthMiddlewareAuthorize::class, 'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class, 'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class, 'cors' => AppHttpMiddlewareAccessControlAllowOrigin::class, ]; }
第四步:在路由中添加路由
Route::middleware('cors')->group(function () { // });
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END