lumen框架解決非簡單請求 cors 跨域問題
阿新 • • 發佈:2019-02-02
Lumen在做前後端分離專案時,在瀏覽器中訪問,若前後端域名不一致會導致跨域問題,簡單跨域好解決。若傳送的是非簡單跨域(參考文章),此時瀏覽器會先發送option請求進行預檢,預檢通過才傳送真正的請求。此時服務端要實現option請求的接收。服務端程式碼實現如下:
新增如下中介軟體:
<?php
namespace App\Http\Middleware;
use Closure;
class CrossHttp
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if($request->getMethod() == "OPTIONS") {
$allowOrigin = [
'http://192.168.1.47',
'http://localhost',
];
$Origin = $request ->header("Origin");
if(in_array($Origin, $allowOrigin)){
return response()->json('ok', 200, [
# 下面引數視request中header而定
'Access-Control-Allow-Origin' => $Origin,
'Access-Control-Allow-Headers' => 'x-token' ,
'Access-Control-Allow-Methods' => 'GET,POST,OPTIONS']);
} else {
return response()->json('fail', 405);
}
}
$response = $next($request);
$response->header('Access-Control-Allow-Origin', '*');
return $response;
}
}
在 boostrap/app.php 裡註冊一下全域性中介軟體即可完成
$app->middleware([
\App\Http\Middleware\CrossHttp::class,
]);