Выбор ответа Junior Сеть, Codable и хранение спрашивают часто обновлено
URLSession и HTTP-статусы ошибок
Вопрос
try await URLSession.shared.data(for: request) вернул ответ со статусом 500. Что произойдёт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибки не будет: статус нужно проверить в HTTPURLResponse.statusCode. URLSession бросает ошибки транспортного уровня: нет сети, таймаут, отмена, проблемы TLS.
Варианты ответа
- Будет брошена
URLError.badServerResponseс кодом ответа внутри - Будет брошена
DecodingError: тело не соответствует модели - URLSession сама повторит запрос до трёх раз, затем бросит
URLError - Ошибки не будет: статус нужно проверить в
HTTPURLResponse.statusCodeправильный ответ
Разбор
URLSession бросает ошибки транспортного уровня: нет сети, таймаут, отмена, проблемы TLS. Любой полученный HTTP-ответ, включая 4xx и 5xx, для неё успех. Поэтому сетевой слой приводит URLResponse к HTTPURLResponse, проверяет диапазон 200-299 и бросает свою ошибку. DecodingError появится, только если пытаться декодировать тело ошибки как модель. Автоматических повторов нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.