Javascript FireFox的XMLHttpRequest从本地主机到REST服务的CORS问题

Javascript FireFox的XMLHttpRequest从本地主机到REST服务的CORS问题,javascript,firefox,cors,xmlhttprequest,Javascript,Firefox,Cors,Xmlhttprequest,现在,当我使用IIS服务器在本地主机上打开开发页面,并尝试使用FireFox对另一台服务器上的REST服务执行XMLHttpRequest时,我遇到了以下错误: 已阻止跨源请求:同一源策略不允许读取 位于的远程资源 . (原因:CORS标头“访问控制允许来源”不匹配 '') 这个问题在FireFox(版本62.0.2)中似乎是一个新问题,因为它以前一直在工作,而我在使用Chrome或IE时没有这个问题 我想了解为什么它以前可以使用而现在不能使用,为什么它仍然可以在Chrome浏览器中使用而不能在

现在,当我使用IIS服务器在本地主机上打开开发页面,并尝试使用FireFox对另一台服务器上的REST服务执行
XMLHttpRequest
时,我遇到了以下错误:

已阻止跨源请求:同一源策略不允许读取 位于的远程资源 . (原因:CORS标头“访问控制允许来源”不匹配 '')

这个问题在FireFox(版本62.0.2)中似乎是一个新问题,因为它以前一直在工作,而我在使用Chrome或IE时没有这个问题

我想了解为什么它以前可以使用而现在不能使用,为什么它仍然可以在Chrome浏览器中使用而不能在FireFox中使用

很可能是REST服务或FireFox安全性中的某些内容发生了更改吗?

以下是来自REST服务的响应头:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:8080
Cache-Control: max-age=0,must-revalidate, max-age=60
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/plain;charset=utf-8
Date: Tue, 02 Oct 2018 12:30:29 GMT
Expires: Tue, 02 Oct 2018 12:41:30 GMT
Keep-Alive: timeout=15, max=100
Set-Cookie: UqZBpD3n3iPIDwJU9Am+pGqSSQ@@=v…Sep-2028 12:30:28 GMT; Path=/
Transfer-Encoding: chunked
Vary: Origin
Vary: Accept-encoding
下面是如何生成
XMLHttpRequest

function makeRequest(url, postData, options)
    return new Promise(function(resolve, reject) {
        var xhr = new XMLHttpRequest();
        url = options.method == "GET" ? url + "?" + _encodePostData(postData) : url;
        xhr.open(options.method, url, options.async);
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                var response = JSON.parse(xhr.response);
                //service internal error
                if (response.results[1].value) {
                    reject(response.results[1].value);
                } else {
                    resolve(response.results[0].value);
                }
            }
        };
    });
};

您需要在服务器端添加CORS头

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token"); 

最后,进一步的调查证明问题出在FireFox插件上,即:DuckDuckGo Privacy Essentials

好的,谢谢你,你知道为什么它以前可以工作,而现在不行,为什么它仍然在Chrome上工作,而不是在FireFox上?浏览器处理AJAX/XMLHttpRequests的方式不同,我们需要在服务器端提供适当的头文件