You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同域名下Ajax调用PHP接口出现CORS跨域403错误如何解决

问题根源定位

  • 首先纠正认知误区:同源策略要求协议、域名、端口三者完全一致才算同源,你提到的http://www.mywebsite.com、https://mywebsite.com、https://www.mywebsite.com三者协议、域名配置均不相同,属于跨域场景,并非同域名。
  • 403错误和CORS配置无直接关联:CORS配置错误只会触发浏览器侧的跨域拦截报错,响应状态码通常为200,不会返回403。返回403说明你的服务端程序、前置Web服务器(Nginx/Apache)、WAF或CDN直接拒绝了该请求。

排查解决步骤

  1. 替换非标准HTTP方法
    ADD不属于IETF定义的标准HTTP方法,绝大多数Web服务器默认会拦截非标准方法返回403。建议你将自定义的ADD方法替换为POST,在请求体中新增action=add参数做业务逻辑判断;如果一定要保留ADD方法,需要手动在Web服务器配置中放开ADD方法的访问限制。

  2. 处理OPTIONS预检请求
    自定义方法的跨域请求会先发送OPTIONS预检请求,若PHP层没有单独处理OPTIONS请求,或者Web服务器拦截了OPTIONS请求,也会返回403。可以在PHP代码最前端增加OPTIONS请求的处理逻辑:

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    http_response_code(200);
    exit();
}
  1. 排查HTTPS站点的访问控制规则
    你提到HTTP站点请求无报错,HTTPS站点报错,大概率是你的Web服务器针对HTTPS虚拟主机单独配置了请求方法限制,或者HTTPS站点配置了CSRF校验规则,拦截了非GET的跨站请求,可检查对应的站点配置文件做调整。

  2. 优化CORS配置
    你当前使用*通配符允许所有源存在安全风险,建议改为根据请求Origin动态返回允许的域名,配置示例如下:

$allowOrigin = [
    'http://www.mywebsite.com',
    'https://mywebsite.com',
    'https://www.mywebsite.com'
];
if (isset($_SERVER['HTTP_ORIGIN']) && in_array($_SERVER['HTTP_ORIGIN'], $allowOrigin)) {
    header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
    header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
    header('Access-Control-Allow-Headers: Content-Type, x-requested-with');
    // 如果需要传递Cookie可以加下面这行
    // header('Access-Control-Allow-Credentials: true');
}

内容的提问来源于stack exchange,提问作者Matthieu Marcé

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:27:00