THINKPHP跨域報錯的解決方案

報錯:has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
環(huán)境:thinkphp6 +nginx
今天和VUE配合調(diào)用接口的時候發(fā)現(xiàn)跨域報錯。
參考
跨域請求 · ThinkPHP5.1完全開發(fā)手冊 · 看云
中間件 · ThinkPHP6.0完全開發(fā)手冊 · 看云
按照官網(wǎng)給出的例子,在中間件配置允許跨域
<?php
// 中間件配置
use think\middleware\AllowCrossDomain;
return [
AllowCrossDomain::class
];
前端請求偶爾還是會出現(xiàn)了跨域請求提示
Access to XMLHttpRequest at from origin has been blocked by CORS policy: Request header field x-token is not allowed by Access-Control-Allow-Headers in preflight response.
php在批量導入excel數(shù)據(jù)更新時偶爾會出現(xiàn)這個問題,出現(xiàn)時間不定,中間件都配置了跨域還是不行。
新建一個自定義的跨域中間件
<?php
namespace app\middleware;
use think\middleware\AllowCrossDomain;
class AllowCrossDomainMiddleware extends AllowCrossDomain
{
// 加入自定義請求頭參數(shù) X-Token
protected $header = [
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Max-Age' => 1800,
'Access-Control-Allow-Methods' => 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers' => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With, X-Token',
];
}重新配置中間件
<?php
// 中間件配置
use think\middleware\AllowCrossDomain;
use app\middleware\AllowCrossDomainMiddleware;
return [
// 不使用默認的跨域中間件
// AllowCrossDomain::class
// 使用自定義跨域中間件
AllowCrossDomainMiddleware::class
];
中間件,入口文件、路由都折騰了好幾遍不行。
最后解決辦法:
可以在入口文件添加以下代碼,單獨處理options請求
public/index.php
// 添加允許跨域請求頭
header("'Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With, X-Token");
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, PATCH');
// 處理 OPTIONS 請求
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
exit;
}以上就是THINKPHP跨域報錯的解決方案的詳細內(nèi)容,更多關于THINKPHP跨域報錯的資料請關注腳本之家其它相關文章!
相關文章
php獲取url字符串截取路徑的文件名和擴展名的函數(shù)
php url字符串截取路徑的文件名和擴展名,需要的朋友可以參考下。2010-01-01
PHP中addslashes與mysql_escape_string的區(qū)別分析
這篇文章主要介紹了PHP中addslashes與mysql_escape_string的區(qū)別,簡單分析了addslashes與mysql_escape_string在使用過程中的區(qū)別,具有一定參考借鑒價值,需要的朋友可以參考下2016-04-04
PHP實現(xiàn)采集抓取淘寶網(wǎng)單個商品信息
這篇文章主要介紹了PHP實現(xiàn)采集抓取淘寶網(wǎng)單個商品信息,本文是一種實現(xiàn)思路,使用file_get_contents函數(shù)實現(xiàn),并給出了采集正則,需要的朋友可以參考下2015-01-01

