欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

THINKPHP跨域報錯的解決方案

 更新時間:2024年03月06日 10:26:04   作者:yuanzelin8  
這篇文章主要介紹了THINKPHP跨域報錯has been blocked by CORS policy: Response to preflight request doesn't pass access control check的解決方案,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下

報錯: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)文章

最新評論