Почему 1 из 10 моих запросов возвращает ошибку CORS в браузере - PullRequest
1 голос
/ 07 августа 2020

В настоящее время у меня есть сценарий, который выполняет запрос ajax с использованием XMLHttpRequest(). Суть скрипта заключается в отслеживании определенной аналитики, и вот как это было реализовано.

  1. Добавляет прослушиватель событий и отправляет данные в start_tracking_analytics script
document.addEventListener('DOMContentLoaded', function(){
try{
    
    //url to send data to
    var url = 'https://subdomain.domain.com/start_tracking_analytics.php?key='+tracker_key;
    
    //host name
    var host = location.protocol + '//' + location.hostname
    
    //send data
    sendAnalytics(url, host);
    
    
        setTimeout(function(){
            setInterval(function(){
                try{
                    sendUpdateAnalytics();
                }catch(e){
                    
                }
            }, 7500);
            
            
        }, 1000);
    
    }catch(e){
        
    }

});
Вот как реализована функция sendAnalytics
function sendAnalytics(url, host){
    try{
        var createCORSRequest = function(method, url) {

        var xhr = new XMLHttpRequest();

        if ("withCredentials" in xhr) {
        // Most browsers.
        xhr.open(method, url, true);

        } else if (typeof XDomainRequest != "undefined") {

        // IE8 & IE9
        xhr = new XDomainRequest();
        xhr.open(method, url);

        } else {

        // CORS not supported.
        xhr = null;
        }

        return xhr;

        };


        var method = 'POST';
        var xhr = createCORSRequest(method, url);
        
        xhr.onerror = function() {
        // Error code goes here.
        };

        xhr.send(); 
    }catch(e){
        //...
    }
}
Вот как был реализован sendUpdateAnalytics . Примечание : это срабатывает с интервалами
 function sendUpdateAnalytics(){
    try{

        //url to send data to
        var url = 'https://subdomain.domain.com/end_tracking_analytics.php?id='+tracker_session_id; 
        
        //current host
        var host = location.protocol + '//' + location.hostname

        //send the data
        sendData(url, host);
    }catch(e){
        
    }   
}

Теперь, к сценарию backend (ответа). т.е. - start_tracking_analytics. php && end_tracking_analytics. php

В обоих сценариях у меня были установлены эти заголовки

 //GET variables
$host = $_GET["host"];
$key = $_GET["key"];

//set header for CORS
header("Access-Control-Allow-Origin: $host");
header("Access-Control-Allow-Credentials: true");

//I Do all of my computations here and echo an integer

echo 1;

Проблема : 1 из 10 запросов, отправленных на end_tracking_analytics, возвращается ошибка CORS

Access to XMLHttpRequest at 'https://subdomain.domain.com/end_tracking_analytics.php?id=1&host=https://www.hostUrl.com&key=XXXXX' from origin 'https://www.hostUrl.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Я действительно надеюсь, что это объясняет, и буду рад предоставить более подробную информацию, если это не так. Есть идеи, почему это могло происходить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...