答案:通过设置PHP响应头可解决跨域问题,需配置Access-Control-Allow-Origin、Methods和Headers;对非简单请求处理OPTIONS预检;携带凭证时需指定具体域名并启用Allow-Credentials。

处理跨域请求(CORS)在前后端分离开发中非常常见。当浏览器发起的请求目标与当前页面域名不同时,就会触发跨域限制。PHP可以通过设置适当的HTTP响应头来允许跨域访问。
CORS(Cross-Origin Resource Sharing)是浏览器的一种安全策略,用于控制一个源(origin)的前端脚本能否获取另一个源的资源。服务端需要明确告诉浏览器哪些来源可以访问资源。
常见的跨域场景包括:前端运行在http://localhost:3000,而后端API在http://localhost:8080,此时即构成跨域请求。
在PHP脚本最开始处添加以下响应头即可支持简单跨域请求:
立即学习“PHP免费学习笔记(深入)”;
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
说明:
*表示允许所有域名,生产环境建议指定具体域名,如http://example.com
对于非简单请求(如包含自定义头、使用PUT方法等),浏览器会先发送一个OPTIONS请求进行预检。
需单独处理该请求,避免返回错误内容:
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header("Access-Control-Allow-Origin: http://localhost:3000");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Access-Control-Max-Age: 86400"); // 预检结果缓存时间(秒)
exit; // 预检请求不需要返回内容
}
这样可确保预检通过后,实际请求能正常发送。
如果前端请求携带Cookie或Authorization头,需开启凭证支持:
header("Access-Control-Allow-Origin: http://localhost:3000"); // 不能为 *
header("Access-Control-Allow-Credentials: true");
注意:当使用Access-Control-Allow-Credentials: true时,Access-Control-Allow-Origin必须是具体域名,不能是通配符*。
基本上就这些。合理配置CORS头既能保证接口可用性,也能避免不必要的安全风险。建议根据实际部署环境调整允许的源和方法。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号