php跨域需在输出前用header()设响应头,开发可用access-control-allow-origin: *,生产须指定源并配allow-credentials;需处理options预检,建议全局统一配置并校验headers_sent()。

直接在 PHP 脚本开头(输出任何内容之前)用 header() 函数添加跨域响应头即可,最常用的是 Access-Control-Allow-Origin。
基础跨域设置(允许任意来源)
适用于开发或测试环境,简单粗暴:
注意:生产环境不建议设为*,尤其当请求带凭据(如 cookies)时会冲突。
header('Access-Control-Allow-Origin: *');- 这行必须在
echo、print、HTML 输出或任何空白符之前执行 - 如果后续要支持 POST、PUT 等方法,还需补充其他头
支持凭据的跨域(如带 cookie 登录态)
前端请求设置了 credentials: 'include' 时,后端必须明确指定源,不能用 *:
header('Access-Control-Allow-Origin: https://your-frontend.com');header('Access-Control-Allow-Credentials: true');header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
兼容预检请求(OPTIONS)
浏览器对复杂请求(如带自定义 header 或非简单 method)会先发 OPTIONS 请求。PHP 需主动响应它:
- 在脚本开头加判断:
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit(0); } - 或更完整地返回空响应并带上跨域头:
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {<br> header('HTTP/1.1 200 OK');<br> header('Access-Control-Allow-Origin: https://your-frontend.com');<br> header('Access-Control-Allow-Credentials: true');<br> header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');<br> header('Access-Control-Allow-Headers: Content-Type, Authorization');<br> exit;<br> }
全局统一处理建议
避免每个接口重复写,可放在公共入口文件(如 index.php)或中间件中:
- 用数组定义允许的域名白名单,根据
$_SERVER['HTTP_ORIGIN']动态设置Access-Control-Allow-Origin - 始终检查是否已发送头(防止重复 header 报错),可用
headers_sent()判断 - 开发阶段可临时加
header('Access-Control-Max-Age: 86400');减少预检频率
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











