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在批量導(dǎo)入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)容,更多關(guān)于THINKPHP跨域報錯的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
php5.5新數(shù)組函數(shù)array_column使用
array_column 用于獲取二維數(shù)組中的元素(PHP 5 >= 5.5.0),但我們有時候需要在低版本中使用,那么就可以使用下面的代碼即可2013-07-07php strrpos()與strripos()函數(shù)
以下是對php中的strrpos函數(shù)與strripos函數(shù)的用法進行了詳細的介紹,需要的朋友可以過來參考下2013-08-08PHP面向?qū)ο蟪绦蛟O(shè)計之對象的遍歷操作示例
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計之對象的遍歷操作,結(jié)合具體實例形式分析了php面向?qū)ο蟪绦蛟O(shè)計中對象屬性遍歷的相關(guān)操作技巧與注意事項,需要的朋友可以參考下2019-06-06PHP統(tǒng)計目錄下的文件總數(shù)及代碼行數(shù)(去除注釋及空行)
在開發(fā)的時候,為了統(tǒng)計開發(fā)出的代碼總行數(shù)及文件總數(shù),在沒有使用工具的時候,總是要去一個文件一個文件的查找,文件夾層次少還行,層次多的時候就累死人了2011-01-01php+AJAX傳送中文會導(dǎo)致亂碼的問題的解決方法
關(guān)于在AJAX中GET回的ResponseText中文亂碼的最簡解決辦法2008-09-09