Javascript-CORS-No';访问控制允许原点';标题已存在

Javascript-CORS-No';访问控制允许原点';标题已存在,javascript,cors,same-origin-policy,Javascript,Cors,Same Origin Policy,我一直在与CORS合作,遇到了以下问题。 客户端抱怨不存在“访问控制允许来源”标题,而他们存在,并且客户端发出实际的POST请求,收到200个 function initializeXMLHttpRequest(url) { //the code that initialize the xhr var xhr = new XMLHttpRequest(); xhr.open('POST', url, true); xhr.withCredentials = true;

我一直在与CORS合作,遇到了以下问题。 客户端抱怨不存在“访问控制允许来源”标题,而他们存在,并且客户端发出实际的POST请求收到200个

function initializeXMLHttpRequest(url) {  //the code that initialize the xhr
    var xhr = new XMLHttpRequest();
    xhr.open('POST', url, true);
    xhr.withCredentials = true;
    xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');

    //set headers
    for (var key in headers) {
        if (headers.hasOwnProperty(key)) {  //filter out inherited properties
            xhr.setRequestHeader(key,headers[key]);
        }
    }

        return xhr;
}

含铬

chrome控制台日志

Chrome选项请求

Chrome POST请求

在Firefox中

Firefox控制台日志

Firefox选项请求

Firefox POST请求
null
对于
访问控制允许源站
不起作用,必须源站域或
*
允许任何源站


有关更多详细信息,请参见。

简而言之:访问控制标题(例如,
访问控制允许源站
)需要显示,以响应选项和实际POST

function initializeXMLHttpRequest(url) {  //the code that initialize the xhr
    var xhr = new XMLHttpRequest();
    xhr.open('POST', url, true);
    xhr.withCredentials = true;
    xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');

    //set headers
    for (var key in headers) {
        if (headers.hasOwnProperty(key)) {  //filter out inherited properties
            xhr.setRequestHeader(key,headers[key]);
        }
    }

        return xhr;
}
工作流程:

  • 客户端使用这些HTTP访问头发出选项请求。(例如,
    来源、访问控制请求方法、访问控制请求标题

  • 服务器用这些访问控制头响应,允许访问。(例如,
    访问控制允许来源、访问控制公开标头、访问控制最大年龄、访问控制允许凭据、访问控制允许方法、访问控制允许标头

  • 客户端使用数据发出POST请求

  • 服务器回复帖子。如果
    Access Control Allow Origin
    头在服务器响应中不存在。虽然POST成功并在网络选项卡中显示了200个状态代码,
    xhr.status
    为0,并且将触发
    xhr.onerror
    。浏览器将显示错误消息

  • 标题引用:

    我已将其设置为原始域。但是localhost也有这个问题。(本地主机请求其他域的资源。)