CORS проблема с XMLHttpRequest от локального хоста до службы REST с FireFox - PullRequest
0 голосов
/ 02 октября 2018

Теперь, когда я открываю страницу разработки на своем локальном хосте с помощью сервера IIS и пытаюсь создать XMLHttpRequest для службы REST на другом сервере, использующем FireFox, я получил эту ошибку:

Cross-Оригинальный запрос заблокирован: та же политика происхождения запрещает чтение удаленного ресурса на https://carto48dev.education.gouv.qc.ca/arcgis/rest/services/DEV/AUTH_SERVICES/GPServer/Login/execute. (Причина: заголовок CORS 'Access-Control-Allow-Origin' не совпадает 'https://localhost:8080’).

Эта проблема кажется новой в 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 голосов
/ 02 октября 2018

Наконец, дальнейшие исследования доказали, что проблема заключалась в дополнении FireFox, а именно: DuckDuckGo Privacy Essentials

0 голосов
/ 02 октября 2018

Вам нужно будет добавить заголовки 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"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...