header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Origin: https://test.com');
在實際項目中最好指定能跨域訪問的域名,增長安全性。能夠寫在一個公共類裏面,封裝一個方法調用。
// 設置能訪問的域名 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'); } }
起初只在文件開頭設置了php
header('Access-Control-Allow-Origin:*');
而後報錯html
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-Headerscookie
而後成功返回接口信息cors