У меня есть браузерный клиент, который делает 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. Это может быть не актуально!
У кого-нибудь есть какие-нибудь идеи или вещи, которые можно попробовать, которые могли бы отследить источник?
Ура!