Unexpected token <, <!DOCTYPE is not valid JSON: сервер вернул HTML
Ошибка значит одно: первым символом ответа был <, то есть сервер прислал HTML. Осталось понять, какую страницу и почему.
Пять частых причин
Неверный адрес: опечатка, лишний или пропущенный /api, и сервер вернул страницу 404. Истекла сессия, и запрос перенаправили на страницу входа. Прокси или балансировщик ответил своей страницей ошибки 502 или 504. Сервер фронтенда отдаёт index.html на любой неизвестный путь, и запрос к API попал к нему, а не к бэкенду. Упало само приложение, и вместо JSON пришла HTML-страница с ошибкой.
Как увидеть, что пришло на самом деле
Выполните запрос с ключом -i: curl покажет код ответа и заголовки, включая Content-Type. Если там text/html, смотрите на код. 404 означает неверный адрес, 401 или перенаправление на страницу входа связаны с авторизацией, 502 и 504 указывают на прокси или упавший сервис.
curl -i https://api.example.com/api/orders/42Как защитить код и тесты
Проверяйте код ответа и Content-Type до разбора JSON. В автотесте сделайте это отдельными проверками: тогда отчёт скажет, что пришёл 404 text/html, а не что JSON неверный. В Checkcraft это правила на код ответа и заголовок, которые стоят рядом с проверками полей.
const response = await fetch('/api/orders/42');
const type = response.headers.get('content-type') || '';
if (!response.ok || !type.includes('application/json')) {
const text = await response.text();
throw new Error(`HTTP ${response.status}, ${type}: ${text.slice(0, 200)}`);
}
const order = await response.json();Повторите это на своём API
Checkcraft — настольная программа: сохраняет проверки ответа API без кода и показывает, что не совпало. Начните с учебного примера, затем подставьте свои обезличенные данные. Free работает на Windows и Linux без ограничения срока.
Скачать FreeКак получить и запустить приложениеСкачивание без регистрации и почты, архив готов за пару минут. Состав бесплатной версии опубликован на странице тарифов.
Документация
Начните с примера по ссылкам и сопоставьте результат с требованием своей проверки.