Ошибка истечения таймаута запроса через axios
При создании React компонента происходит запрос к серверу через axios для получения данных представления, в моем случае это просто запрос к php-скрипту из соседней папки. Проблема в том, что по неясной причине запрос успешен примерно в 80% случаев - данные приходят и все ок, но иногда, после некоторого ожидания, выбрасывается ошибка об истечении timeout axios, будь он хоть 5/10/15/etc секунд, ощущение, что до самого php-скрипта дело вообще не доходит, на стороне php просто отдаются данные при попадании в route, всегда одинаково при нижеописанном запросе, никаких сложных расчетов и sleep нет.
upd. Проблема на стороне сервера, слишком долгий ответ при имитации GET-запроса через postman, периодически возвращается пустое тело, без ошибок и прочего. Может это что-то в настройках PHP или Apache?
Настройки Axios
const api = axios.create({
baseURL: "/api/",
timeout: 1000 * 5,
withCredentials: true
});
Запрос
api.get(uri)
.then(responce => dispatch({ type: "received", payload: responce.data }))
.catch(error => dispatch({ type: "error", payload: error }))
При выводе ошибки в консоль просто пишется:
error from server in action received: timeout of 5000ms exceeded
Заголовки.
Успешный:
General
Request URL: http://localhost:3000/api/category/phones
Request Method: GET
Status Code: 200 OK
Remote Address: 127.0.0.1:3000
Referrer Policy: strict-origin-when-cross-origin
Response Headers
connection: close
Content-Encoding: gzip
content-type: text/html; charset=UTF-8
transfer-encoding: chunked
Vary: Accept-Encoding
Request Headers
Accept: application/json, text/plain, */*
Cache-Control: no-cache
Connection: keep-alive
DNT: 1
Host: localhost:3000
Pragma: no-cache
Referer: http://localhost:3000/category/phones
X-KL-Ajax-Request: Ajax_Request
Тот, что возвращается при ошибке таймаута
General
Request URL: http://localhost:3000/api/category/phones
Referrer Policy: strict-origin-when-cross-origin
Request Headers
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Cache-Control: no-cache
Connection: keep-alive
Host: localhost:3000
Pragma: no-cache
Referer: http://localhost:3000/category/phones
X-KL-Ajax-Request: Ajax_Request
PHP-скрипт
if ($_SERVER["REQUEST_METHOD"] === "GET") {
$uri = trim(filter_var($_SERVER["REQUEST_URI"], FILTER_SANITIZE_URL));
print json_encode(Request::getCategoryData($uri, 5));
}
public static function getCategoryData($uri, $limit = null)
{
// тут я сократил, просто извлечение из uri подстроки для названия
// таблицы категории, типа phones/gadgets/etc
$category_products_table = $uri;
$products_query = $limit
? "SELECT * FROM {$category_products_table} LIMIT {$limit}"
: "SELECT * FROM {$category_products_table}";
$pdo = Connect::exec()->prepare($products_query);
$pdo->execute();
return $pdo->fetchAll();
}
Ответы (1 шт):
Проблема была в антивирусе Касперского, его отключение избавило от всех проблем с запросами. После трех суток поиска ошибок, установки разных версий Апача и PHP, чтения логов до пяти утра, закажу пожалуй себе футболку с такой надписью - "Проблема была в антивирусе Касперского".