跨域是瀏覽器出於安全的同源策略,簡單來說:瀏覽器從一個域名的網頁去請求另一個域名的資源時,域名、端口、協議任一不同,都是屬於跨域。
跨域的解決方法有很多種,這裏只介紹ThinkPHP的解決方法。
核心語句:
// 返回JSON數據格式到客戶端 包含狀態信息
header('Content-Type:application/json; charset=utf-8');
// 允許訪問源
header('Access-Control-Allow-Origin:*');
// 允許訪問的有效期
header('Access-Control-Max-Age:86400');
// 允許訪問的方法
header('Access-Control-Allow-Methods:OPTIONS, GET, POST, DELETE');
一開始我想到的是直接放在每個方法的下面,如下
public function login(){
header('Content-Type:application/json; charset=utf-8');
header('Access-Control-Allow-Origin:*');
header('Access-Control-Max-Age:86400');
header('Access-Control-Allow-Methods:OPTIONS, GET, POST, DELETE');
}
雖然可以成功的解決跨域的問題,但是每寫一個方法都需要重新寫這四條語句,就會比較麻煩。
那麼我們的控制器一般都是直接繼承Controller,那麼我們就定義一個BaseController,
class BaseController extends Controller{
public function _initialize(){
//處理跨域問題
header('Content-Type:application/json; charset=utf-8');
header('Access-Control-Allow-Origin:*');
header('Access-Control-Max-Age:86400'); // 允許訪問的有效期
header('Access-Control-Allow-Headers:*');
header('Access-Control-Allow-Methods:OPTIONS, GET, POST, DELETE');
}
}
然後把我們的接口全部繼承BaseController即可
好了,這樣就可以一勞永逸了