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

跨域访问控制校验失败(无HTTP成功状态)本地调用解决方案咨询

解决CORS错误:doesn't pass access control check: It does not have HTTP ok status

核心问题拆解

你踩了个CORS常见坑:把本该由服务器返回的跨域响应头,错误加到了前端请求里。Access-Control-Allow-*这类头是服务器用来告诉浏览器“允许这个跨域请求”的凭证,前端请求时加这些完全无效,反而可能干扰预检请求的正常处理。

另外错误提示明确说明请求没有返回HTTP OK状态(200-299区间),大概率是你的请求(包括浏览器自动发的OPTIONS预检请求)被服务器返回了4xx/5xx状态码,导致浏览器的跨域检查直接失败。


具体修复步骤

1. 清理前端请求里的无效头

修改你的AJAX代码,删掉所有Access-Control-*开头的请求头,同时修正success里的错误代码(result是服务器返回的数据,不是响应对象,根本没有setHeader方法):

$.ajax({
    method: "POST",
    url: host + "/fgerp-ms-2.0.0/oauth/token?grant_type=password&username=fgapiuser&password=fgapiuser",
    async: true,
    crossDomain: true,
    beforeSend: function (xhr) {
        // 只保留必要的授权头和跨域凭证设置
        xhr.setRequestHeader("Authorization", "Basic " + btoa("fgapiservice" + ":" + "fg@1234$"));
        xhr.withCredentials = true;
    },
    success: function (result) {
        alert("in success" + result.access_token);
        accesstoken = result.access_token;
    },
    // 加上错误回调,方便排查具体HTTP状态
    error: function(xhr, status, error) {
        console.log("HTTP状态码:", xhr.status);
        console.log("错误详情:", error);
    }
});

2. 配置服务器端的CORS规则(关键)

跨域权限完全由服务器控制,必须确保服务器满足以下要求:

  • 处理OPTIONS预检请求:必须返回200 OK状态,同时返回正确的响应头:
    • Access-Control-Allow-Origin: 设置为你的本地前端域名(比如http://localhost:8080,注意开启withCredentials=true时不能用*)
    • Access-Control-Allow-Methods: 要包含POST, OPTIONS
    • Access-Control-Allow-Headers: 必须包含Authorization(你的请求带了这个头)
    • Access-Control-Allow-Credentials: 设置为true
  • 处理实际的POST请求:同样要返回上述CORS响应头,并且确保请求本身返回200 OK(比如核对用户名密码、授权头是否正确,避免返回401/403)

3. 用浏览器工具排查请求细节

打开浏览器开发者工具的网络面板,查看请求记录:

  • 先看OPTIONS预检请求的状态码,如果是401/403,说明服务器没配置允许OPTIONS请求跳过授权验证
  • 再看POST请求的状态码,如果是401,说明你的Authorization头或者用户名密码有误,需要核对参数正确性

内容的提问来源于stack exchange,提问作者syam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:15:42