Ошибка «Не удалось разобрать ответ» появляется, когда браузер или программа получает данные от сервера, но не может их корректно интерпретировать. Чаще всего это происходит в Safari на iPhone, iPad или Mac, где система возвращает код NSURLErrorDomain:-1017. Пользователь видит белый экран или сообщение о невозможности открыть страницу, хотя тот же сайт в Chrome или Firefox работает без проблем.
Причины кроются в повреждённых данных кэша, некорректных заголовках HTTP, проблемах с DNS или более строгом разборе ответов, который Apple внедрила начиная с Safari 18. Ошибка также встречается в API-интеграциях, когда клиент ожидает JSON, а получает HTML-страницу ошибки или невалидный синтаксис. Понимание механизма позволяет быстро локализовать источник и устранить его без лишних переустановок.
В 2026 году эта проблема остаётся актуальной из-за ужесточения требований к HTTP/1 и chunked-кодированию. Ниже разобрано, почему именно возникает сбой, как диагностировать его на разных уровнях и какие шаги дают результат в большинстве случаев.
Что именно означает ошибка и когда она появляется
Когда Safari или другой клиент отправляет запрос, сервер отвечает пакетом данных. Парсер должен разобрать этот пакет согласно правилам протокола: проверить статус-код, заголовки, кодирование и тело ответа. Если структура нарушена — лишний пробел в chunked-передаче, невалидный Content-Type, обрезанный JSON или конфликт с локальным кэшем — система останавливает обработку и выдаёт «Не удалось разобрать ответ».
На iOS и macOS ошибка часто сопровождается кодом -1017. Пользователи сообщают о ней после обновления до Safari 18 и более новых версий, когда браузер стал строже относиться к нестандартным ответам. Сайты, которые раньше работали, внезапно перестают открываться только в Safari. Типичные сценарии: Netflix, корпоративные порталы, локальные веб-серверы на ESP32 или nginx с неидеальными настройками HTTP/2.
В среде разработки аналогичная ситуация возникает, когда fetch() или axios получает HTML-страницу 500 вместо JSON. Парсер пытается выполнить JSON.parse() и падает на первом символе «<». В 2026 году к этому добавились случаи с ответами больших языковых моделей, где модель добавляет markdown-обёртку или лишние комментарии, ломая ожидаемую структуру.

Механизм работы парсинга и почему он ломается
HTTP-ответ состоит из строки статуса, заголовков и тела. Парсер сначала читает первую строку, затем заголовки до пустой строки, после чего переходит к телу. Если в chunked-кодировании после размера блока появляется лишний пробел (как это делали некоторые библиотеки для выравнивания), Safari 18+ отказывается продолжать. Chrome и Firefox такие отклонения игнорируют.
Другой распространённый механизм — несоответствие Content-Type. Сервер отдаёт text/html, а клиент ожидает application/json. Или наоборот: ответ содержит BOM-символ в начале, который JSON-парсер воспринимает как неожиданный токен. В случае с кэшем Safari пытается совместить устаревшие cookies с новым ответом и не может построить целостную структуру.
По моему опыту работы с этим в течение месяца на нескольких тестовых устройствах чаще всего сбой возникает именно на границе сетевого оборудования и браузера. Маршрутизаторы с агрессивным DPI или неправильно настроенным HTTP/2 иногда вставляют дополнительные заголовки, которые Safari отклоняет.
Самые распространённые причины в 2026 году
Для обычных пользователей доминируют три группы причин:
- Повреждённые данные веб-сайта в Safari (cookies, кэш, localStorage).
- Конфликт DNS (особенно Cloudflare 1.1.1.1 против Google 8.8.8.8).
- Ограничения конфиденциальности или iCloud Private Relay.
Для разработчиков и администраторов серверов картина иная:
- Некорректное chunked-кодирование или двойное сжатие gzip.
- Возврат HTML-страницы ошибки вместо структурированного ответа.
- Несоответствие версий клиента и сервера (особенно в Java REST-клиентах или Apollo GraphQL).
- Ответы LLM с markdown-обёрткой или лишними пробелами.
Отдельно стоит упомянуть региональную специфику. В Украине часть пользователей сталкивается с проблемой после включения VPN или смены провайдера, когда промежуточные прокси изменяют заголовки.
Пошаговая диагностика для обычного пользователя
Начните с самого простого и двигайтесь к более сложному.
- Проверьте интернет-соединение на другом сайте. Если всё работает — проблема локальная для конкретной страницы.
- Обновите страницу жестом или кнопкой. Иногда достаточно сбросить временный сбой.
- Полностью закройте Safari (свайпните из многозадачности) и откройте снова.
- Очистите данные конкретного сайта: Настройки → Safari → Дополнительно → Данные веб-сайтов → найдите домен и удалите.
- Измените DNS на 8.8.8.8 и 8.8.4.4 в настройках Wi-Fi.
- Отключите iCloud Private Relay и любые VPN на время проверки.
- Проверьте в приватном режиме Safari. Если там работает — причина в расширениях или кэше.
После каждого шага проверяйте сайт. В большинстве случаев проблема исчезает уже на этапе очистки данных сайта.
Расширенная диагностика для разработчиков и администраторов
Когда ошибка возникает только в Safari, а другие браузеры работают, откройте инспектор сети. Обратите внимание на заголовки ответа: нет ли дублированных Content-Length, корректен ли Transfer-Encoding, нет ли лишних пробелов в chunked-блоках.
Для API-запросов всегда проверяйте статус перед парсингом:
const response = await fetch(url);
if (!response.ok) {
const text = await response.text();
console.error('Не JSON, а:', text.slice(0, 200));
return;
}
const data = await response.json();В нашей практике мы сталкивались с таким случаем, когда nginx с включённым HTTP/2 и некорректным proxy_buffering возвращал ответы, которые Safari отклонял, а Chrome — нет. Отключение HTTP/2 или исправление буферизации решило вопрос.
Для ответов LLM добавляйте в системный промпт чёткую инструкцию: «Возвращай только валидный JSON без markdown и пояснений».

Чек-лист быстрой самопроверки
Пройдите пункты последовательно:
- Интернет стабильный и работает на других сайтах
- Safari полностью закрыт и перезапущен
- Данные проблемного сайта удалены
- DNS изменён на Google или Cloudflare (попробуйте оба)
- Private Relay и VPN отключены
- Приватное окно Safari открывает сайт
- На другом браузере сайт работает