一、header類
在thinkphp框架中,可以使用Header類來對響應(yīng)頭進(jìn)行設(shè)置,從而實(shí)現(xiàn)跨域請求的功能。具體的方法是在控制器方法中添加以下代碼:
header("Access-Control-Allow-Origin:?*"); header("Access-Control-Allow-Headers:?Origin,?X-Requested-With,?Content-Type,?Accept");
其中,第一行代碼表示允許所有來源的跨域請求,也可以設(shè)置為具體來源;第二行代碼表示允許跨域請求攜帶的請求頭信息。這樣設(shè)置之后,就可以實(shí)現(xiàn)基本的跨域請求了。
二、第三方庫
除了使用Header類進(jìn)行跨域請求的設(shè)置之外,還可以使用第三方庫來簡化這個(gè)過程。下面以主流的CORS(Cross-Origin Resource Sharing)庫cors拓展為例,來介紹如何使用第三方庫實(shí)現(xiàn)跨域請求。
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
-
安裝cors拓展
打開命令行窗口,執(zhí)行以下命令:
composer?require?topthink/think-cors
-
配置cors拓展
在項(xiàng)目的config文件夾下,創(chuàng)建一個(gè)cors.php文件,輸入以下代碼:
<?php return [ // 允許的請求域名 'allow_origin' =>?['*'], ????//?允許的請求頭信息 ????'allow_headers'?????=>?'Origin,?X-Requested-With,?Content-Type,?Accept', ????//?允許的請求方法 ????'allow_methods'?????=>?'GET,?POST,?PUT,?DELETE,?PATCH', ????//?是否允許發(fā)送Cookie ????'allow_credentials'?=>?true, ????//?跨域請求緩存時(shí)間 ????'max_age'???????????=>?3600, ];
其中,$allow_origin表示允許的請求域名,可以設(shè)置為具體的域名,也可以設(shè)置為通配符“*”;$allow_headers表示允許的請求頭信息,$allow_methods表示允許的請求方法,$allow_credentials表示是否允許發(fā)送cookie,$max_age表示跨域請求緩存時(shí)間。
-
修改配置文件
在項(xiàng)目的config文件夾下,找到app.php文件,配置如下:
return?[ ????//?... ????'middleware'?=>?[ ????????//?... ????????thinkmiddlewareCors::class, ????], ];
-
調(diào)用cors拓展
在需要跨域請求的控制器方法中,可以直接調(diào)用cors拓展中的方法,實(shí)現(xiàn)跨域請求的設(shè)置:
use?thinkfacadeCors; public?function?index()?{ ????Cors::allowAllOrigin(); ????return?json(['code'?=>?200,?'msg'?=>?'success']); }
這樣設(shè)置之后,就可以實(shí)現(xiàn)跨域請求了。