答案:通过设置PHP响应头可解决跨域问题,需配置Access-Control-Allow-Origin、Methods和Headers;对非简单请求处理OPTIONS预检;携带凭证时需指定具体域名并启用Allow-Credentials。
处理跨域请求(CORS)在前后端分离开发中非常常见。当浏览器发起的请求目标与当前页面域名不同时,就会触发跨域限制。PHP可以通过设置适当的HTTP响应头来允许跨域访问。
理解CORS机制
CORS(Cross-Origin Resource Sharing)是浏览器的一种安全策略,用于控制一个源(origin)的前端脚本能否获取另一个源的资源。服务端需要明确告诉浏览器哪些来源可以访问资源。
常见的跨域场景包括:前端运行在http://localhost:3000,而后端API在http://localhost:8080,此时即构成跨域请求。
基本CORS头信息设置
在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");登录后复制
说明:
Access-Control-Allow-Origin:指定允许访问的源。使用*
表示允许所有域名,生产环境建议指定具体域名,如http://example.com
Access-Control-Allow-Methods:允许的HTTP方法Access-Control-Allow-Headers:客户端请求中允许携带的头部字段处理预检请求(Preflight Request)
对于非简单请求(如包含自定义头、使用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 CORS头信息设置方法的详细内容,更多请关注php中文网其它相关文章!