Тело AJAX-запроса случайно пусто на стороне сервера - PullRequest
0 голосов
/ 24 мая 2019

У меня есть браузерный клиент, который делает AJAX-вызовы на PHP / Apache. При нажатии кнопки клиент просматривает список «провайдеров» и отправляет Ajax-запрос каждому из них с точно одинаковой полезной нагрузкой.

Случайно некоторые запросы в цикле поступают на серверную часть с пустым телом POST. Что действительно странно в этом, так это тот факт, что другие запросы в том же цикле поступают правильно. Иногда мы видим, что все элементы в цикле прибывают с пустым телом, иногда некоторые в цикле. Это действительно странно!

Сведения об окружающей среде:

Клиент = JQuery 3.3.1, JQueryUI 1.12.1, Bootstrap 3.3.7, проверка JQuery 1.19.0

Сервер = Apache 2.4, PHP 7.1

На самом деле мы не можем воспроизвести проблему в среде разработки, но вход в систему наглядно показывает, что это происходит регулярно на ежедневной основе (возможно, 5% запросов). Мы развернули мониторинг в клиентских браузерах, чтобы перехватывать любые ошибки, и нет ничего с точки зрения исключений или чего-либо, что выглядит так, как будто это может быть связано.

Пример ниже показывает, что мы делаем на стороне клиента.
1) привязать событие клика к
2) при нажатии заполняет объект запроса
3) перебрать список «провайдеров», разместив запрос от 2 к PHP серверу

$(document).ready(function() {
    bindEvents();
}

function bindEvents() {
    $("#myButton").click(function(event) {
        event.preventDefault();
        handleClick();
    });
}

function handleClick() {
    var request = ...;
    ...
    var save=false;
    if (....) {
        save=true;
    }
    var providers = ["provider1", "provider2", "provider3", "provider4", "provider5", "provider6"];
    var ndx;
    for (ndx=0; ndx<providers.length; ++ndx) {
        doRequestSend("action/"+(save?"save":"verify"), request, providers[ndx]);
    }
}

function doRequestSend(action, request, provider) {
    request['apiKey']=getAPIKey();
    var url=baseURL+"/api/"+provider+"/"+action;
    $.ajax({
        type: "POST",
        url: url,
        data: JSON.stringify(request),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data){
            ...
        },
        failure: function(errMsg) {
            ...
        },
        error : function(jqXHR, textStatus, errorThrown) {
            ...
        }
    });
}

Очевидно, что трудно понять проблему, когда я не могу воспроизвести. Тем не менее, я надеюсь, что кто-то может обнаружить проблему с подходом, который может привести к проблеме.

В качестве альтернативы, открыты для любых случайных / сумасшедших идей, которые могут объяснить, КАК это могло произойти! Некоторые запросы в цикле поступают нормально, другие - пустые!

Примечания: - Хотя цикл POST для слегка отличающегося URL-адреса с каждой итерацией, на стороне сервера, они все оказываются в одной и той же точке входа, и первое, что делается, - это журнал тела (это, как мы знаем, он пустой !) - Единственные браузеры, которые (на сегодняшний день), похоже, столкнулись с проблемой, это Chrome 73 & 74 в Windows. Это может быть не актуально!

У кого-нибудь есть какие-нибудь идеи или вещи, которые можно попробовать, которые могли бы отследить источник? Ура!

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