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

时间:2018-10-02 12:13:43

标签: javascript firefox cors xmlhttprequest

现在,当我使用IIS服务器在本地主机上打开开发页面并尝试使XMLHttpRequest到另一个使用FireFox的服务器上的REST服务时,出现此错误:

  

跨源请求被阻止:同源策略禁止阅读   位于的远程资源   https://regexr.com/。   (原因:CORS标头“ Access-Control-Allow-Origin”不匹配   ‘https://carto48dev.education.gouv.qc.ca/arcgis/rest/services/DEV/AUTH_SERVICES/GPServer/Login/execute’)。

此问题似乎在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);
                }
            }
        };
    });
};

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您将需要在服务器端添加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");