THINKPHP跨域報(bào)錯(cuò)的解決方案
報(bào)錯(cuò):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)用接口的時(shí)候發(fā)現(xiàn)跨域報(bào)錯(cuò)。
參考
跨域請(qǐng)求 · ThinkPHP5.1完全開(kāi)發(fā)手冊(cè) · 看云
中間件 · ThinkPHP6.0完全開(kāi)發(fā)手冊(cè) · 看云
按照官網(wǎng)給出的例子,在中間件配置允許跨域
<?php // 中間件配置 use think\middleware\AllowCrossDomain; return [ AllowCrossDomain::class ];
前端請(qǐng)求偶爾還是會(huì)出現(xiàn)了跨域請(qǐng)求提示
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ù)更新時(shí)偶爾會(huì)出現(xiàn)這個(gè)問(wèn)題,出現(xiàn)時(shí)間不定,中間件都配置了跨域還是不行。
新建一個(gè)自定義的跨域中間件
<?php namespace app\middleware; use think\middleware\AllowCrossDomain; class AllowCrossDomainMiddleware extends AllowCrossDomain { // 加入自定義請(qǐng)求頭參數(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 [ // 不使用默認(rèn)的跨域中間件 // AllowCrossDomain::class // 使用自定義跨域中間件 AllowCrossDomainMiddleware::class ];
中間件,入口文件、路由都折騰了好幾遍不行。
最后解決辦法:
可以在入口文件添加以下代碼,單獨(dú)處理options請(qǐng)求
public/index.php
// 添加允許跨域請(qǐng)求頭 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 請(qǐng)求 if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { exit; }
以上就是THINKPHP跨域報(bào)錯(cuò)的解決方案的詳細(xì)內(nèi)容,更多關(guān)于THINKPHP跨域報(bào)錯(cuò)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
php5.5新數(shù)組函數(shù)array_column使用
array_column 用于獲取二維數(shù)組中的元素(PHP 5 >= 5.5.0),但我們有時(shí)候需要在低版本中使用,那么就可以使用下面的代碼即可2013-07-07對(duì)PHP PDO的一些認(rèn)識(shí)小結(jié)
這篇文章主要介紹了對(duì)PHP PDO的一些認(rèn)識(shí)小結(jié),本文講解了什么是PDO、啟用PDO的配置方法、PDO的預(yù)定義類(lèi)、事務(wù)處理例子等內(nèi)容,需要的朋友可以參考下2015-01-01php strrpos()與strripos()函數(shù)
以下是對(duì)php中的strrpos函數(shù)與strripos函數(shù)的用法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之對(duì)象的遍歷操作示例
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之對(duì)象的遍歷操作,結(jié)合具體實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)中對(duì)象屬性遍歷的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-06-06PHP統(tǒng)計(jì)目錄下的文件總數(shù)及代碼行數(shù)(去除注釋及空行)
在開(kāi)發(fā)的時(shí)候,為了統(tǒng)計(jì)開(kāi)發(fā)出的代碼總行數(shù)及文件總數(shù),在沒(méi)有使用工具的時(shí)候,總是要去一個(gè)文件一個(gè)文件的查找,文件夾層次少還行,層次多的時(shí)候就累死人了2011-01-01php+AJAX傳送中文會(huì)導(dǎo)致亂碼的問(wèn)題的解決方法
關(guān)于在AJAX中GET回的ResponseText中文亂碼的最簡(jiǎn)解決辦法2008-09-09