Я написал REST API и заметил проблему, которая, по-видимому, влияет на Chrome и Safari при подключении через 4G и при подключении телефона к Mac и использовании там Chrome.При использовании Firefox на Mac, привязанном к телефону, проблем нет.
Пока не тестируется в Windows.
При использовании Chrome на Android через 4G проблема возникает.
Бэкэнд на основе Apache / PHP / Slim Framework.Интерфейс на основе JQuery, выполняющий вызовы $ .ajax () через HTTPS.
Запрос POST остается на стадии «Задержка» в течение различного времени, прежде чем завершится с ошибкой net :: ERR_TIMED_OUT
Когда запрос проходит успешно, время задержки обычно составляет около 2 мс.
В chrome: // net-internals / # события, которые я вижу длясоответствующий запрос:
REQUEST_ALIVE --> net_error = -7 (ERR_TIMED_OUT)
Поскольку это этап на стороне клиента в процессе выполнения запроса, я задался вопросом, виноват ли мой код на стороне клиента, и последовал совету:
https://stackoverflow.com/a/27514611/6315532
Я добавил заголовок cache:false
и Cache-Control
с no-cache, no-store, must-revalidate
среди нескольких других вещей, и это, похоже, не имело никакого эффекта.
Я также попробовал это: https://stackoverflow.com/a/367827/6315532
Проблема исчезает при использовании домашнего Wi-Fi, предполагая, что это как-то связано с сетью 4G, но поскольку Chrome придерживается предсетевой фазы выполнения запроса, яЯ озадачен.
Он успешно работает примерно в 1/3 временикогда на 4G, и кажется надежным, когда на домашнем WiFi.
Заранее спасибо!
РЕДАКТИРОВАТЬ: я обнаружил, что если я изменю конфигурацию KeepAlive в Apache, эту проблему можно уменьшить,
Если я отклоняю запросы до истечения времени ожидания KeepAlive, он работает нормально.Если KeepAlive завершает свою работу (нет запросов за период), первый последующий запрос будет остановлен на несколько минут, а затем завершится ошибкой с ERR_TIMED_OUT, и последующие запросы будут успешно работать, пока не истечет время ожидания KeepAlive.Есть ли что-то, что я мог бы сделать неправильно, чтобы вызвать это?
Я настроил KeepAliveTimeout, чтобы иметь более высокое значение, и это снижает вероятность того, что приложение столкнется с проблемой, но если его оставить в покое больше, чем время ожиданиязнаю, что он снова потерпит неудачу, не говоря уже о проблемах использования памяти, если сайт будет занят.