1、允許所有域名訪問
header('Access-Control-Allow-Origin: *');
2、允許單個域名訪問
header('Access-Control-Allow-Origin: https://test.com');
3、允許多個域名訪問
在實際項目中最好指定能跨域訪問的域名,增加安全性。可以寫在一個公共類里面,封裝一個方法調用。
// 設置能訪問的域名
static public $originarr = [
'https://test1.com',
'https://test2.com',
];
/**
* 公共方法調用
*/
static public function setheader()
{
// 獲取當前跨域域名
$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
if (in_array($origin, self::$originarr)) {
// 允許 $originarr 數組內的 域名跨域訪問
header('Access-Control-Allow-Origin:' . $origin);
// 響應類型
header('Access-Control-Allow-Methods:POST,GET');
// 帶 cookie 的跨域訪問
header('Access-Control-Allow-Credentials: true');
// 響應頭設置
header('Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token');
}
}
起初只在文件開頭設置了
header('Access-Control-Allow-Origin:*');
然后報錯
Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers in preflight response.
解決方法:
文件開頭設置
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:OPTIONS, GET, POST'); // 允許option,get,post請求
header('Access-Control-Allow-Headers:x-requested-with'); // 允許x-requested-with請求頭
后成功
其中比較疑惑的是 Access-Control-Allow-Headers 的設置。 看了 這篇文檔 后理解了
如果瀏覽器請求包括Access-Control-Request-Headers字段,則Access-Control-Allow-Headers字段是必需的。它也是一個逗號分隔的字符串,表明服務器支持的所有頭信息字段,不限於瀏覽器在"預檢"中請求的字段。
然后看了請求頭中確實 包括Access-Control-Request-Headers
然后成功返回接口信息
