Задержка между событиями XMLHttpRequest.load и XMLHttpRequest.onreadystatechange - PullRequest
0 голосов
/ 27 октября 2019

Код ниже испытывает 40 секунд. задержка между возникновением события load, которое указывает, что серверу отправлено 10 МБ formdata, и событие onreadystatechange, которое указывает, что был получен некоторый ответ от сервера.

function SendData(formdata) {
    var xhr = new XMLHttpRequest();


    xhr.upload.addEventListener("load", function(e) {
        console.log('Finished Transmitting Formdata to Server');
    }, false);

    xhr.onreadystatechange = function(e)    
    {
         console.log('XHR State Changed');

         if ( (xhr.readyState == 4) && (xhr.status == 200) )
            console.log('Server Replied with Success');
    }

    xhr.open("POST", "receive.php");
    xhr.send(formdata);
}

Файл receive.php содержит только:

<?php
   echo 'Formdata received Successfully';
?>

Q : что может быть причиной такой длительной задержки - почему консоль регистрирует 'XHR State Changed' сообщение колоссальное 40сек. после регистрации сообщения 'Finished Transmitting Formdata to Server', ... и как правильно устранить неполадку, чтобы выяснить точную причину этой задержки?

Задержка происходит до xhr.readyState == 2, что до HEADERS_RECEIVED.

На вкладке Network в Chrome DeveloperTools для receive.php, (тип: xhr) отображается следующее:

Queueing:         2.08ms
Stalled:          0.62ms
Request sent:     894ms
Waiting (TTFB):   41.27s
Content Download: 0.69ms

PS
версия PHP: 7.1.33
Apache / NGINX-htaccess-support
FreeBSD 11.3-RELEASE-p3

1 Ответ

0 голосов
/ 01 ноября 2019

Задержка была вызвана модулем Apache «Web Application Firewall», также известным как «WAF». Отключение этого модуля сразу убрало задержку.

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