ThinkPHP6.0处理前端请求跨域问题AllowCrossDomain

简介: ThinkPHP6.0处理前端请求跨域问题AllowCrossDomain

按照官网给出的例子,在中间件配置允许跨域


app/middleware.php

<?php
// 中间件配置
use think\middleware\AllowCrossDomain;
return [
    AllowCrossDomain::class
];

前端请求依然出现了跨域请求提示

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.

原因是我们添加了自定义的请求头X-Token用来携带token,所以需要我们重新改造一下中间件

新建一个自定义的跨域中间件

app/middleware/AllowCrossDomainMiddleware.php

<?php
namespace app\middleware;
use think\middleware\AllowCrossDomain;
class AllowCrossDomainMiddleware extends AllowCrossDomain
{
    // 加入自定义请求头参数 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',
    ];
}

重新配置中间件

app/middleware.php

<?php
// 中间件配置
use think\middleware\AllowCrossDomain;
use app\middleware\AllowCrossDomainMiddleware;
return [
    // 不使用默认的跨域中间件
    // AllowCrossDomain::class
    // 使用自定义跨域中间件
    AllowCrossDomainMiddleware::class
];

继续改进

查看请求日志发现,options请求会走一遍处理流程,有些需要权限校验的地方还会因为缺少参数而报错,这样肯定不行。

可以在入口文件添加以下代码,单独处理options请求


public/index.php

// 处理 OPTIONS 请求
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS'){
    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');
    exit; // 直接退出,不走后序流程
}

参考

https://www.kancloud.cn/manual/thinkphp6_0/1037493

ThinkPHP 5.1.37 开发跨域问题解决

相关文章
|
前端开发 中间件
ThinkPHP6.0处理前端请求跨域问题AllowCrossDomain
ThinkPHP6.0处理前端请求跨域问题AllowCrossDomain
610 0
PbootCMS的默认账号密码是什么?
PbootCMS的默认账号密码是什么?
1650 0
|
机器学习/深度学习 双11
基于机器学习的内存故障预测了解一下 | 双11备战
本文通过对服务器日志的分析,综合服务器的一些静态信息和状态信息,利用机器学习模型,进行服务器内存故障进行预测。
4362 0
|
JavaScript 前端开发
JS之url进行编码和解码(三种方式)
JS之url进行编码和解码(三种方式)
19424 2
|
12月前
|
小程序 前端开发 中间件
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
本文介绍了如何在ThinkPHP框架中配置跨域请求,使用了TP内置的跨域类`\think\middleware\AllowCrossDomain::class`。文章还讨论了小程序和web网页在跨域请求格式上的区别,并提供了解决方案,包括修改跨域中间件源码以支持`Origin`和`token`。此外,还介绍了微信小程序跨域请求的示例和web网页前端发送Axios跨域请求的请求拦截器配置。
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
|
11月前
|
安全 Windows
win10系统:局域网下共享文件夹设置,解决其他电脑访问不成功问题
这篇文章是关于如何在Windows 10系统下设置局域网共享文件夹,并解决其他电脑访问不成功的问题的详细指南。
29031 7
win10系统:局域网下共享文件夹设置,解决其他电脑访问不成功问题
|
11月前
|
Web App开发 JSON 安全
Chrome浏览器的跨域问题
【10月更文挑战第6天】
|
新能源
【2023年第十三届APMCM亚太地区大学生数学建模竞赛】C题 中国新能源电动汽车的发展趋势 44页论文、数据及代码
本文在2023年第十三届APMCM亚太地区大学生数学建模竞赛中针对中国新能源电动汽车的发展趋势进行深入研究,建立了多元线性回归、时间序列和机理模型,分析了影响因素、预测了未来发展趋势,并探讨了对全球汽车产业及生态环境的影响,提供了相应的政策分析和市民宣传信。
423 2
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
64747 3
详解HTTP四种请求:POST、GET、DELETE、PUT
|
Ubuntu TensorFlow 算法框架/工具
ResNet实战:tensorflow2.X版本,ResNet50图像分类任务(小数据集)
本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,今天我和大家一起实现tensorflow2.X版本图像分类任务,分类的模型使用ResNet50。 通过这篇文章你可以学到: 1、如何加载图片数据,并处理数据。 2、如果将标签转为onehot编码 3、如何使用数据增强。 4、如何使用mixup。 5、如何切分数据集。 6、如何加载预训练模型。
1531 0
ResNet实战:tensorflow2.X版本,ResNet50图像分类任务(小数据集)