PHP 服務器端處理跨域問題


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

然后成功返回接口信息

參考 文檔: http://www.ruanyifeng.com/blog/2016/04/cors.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM