Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Атрибуты URLRequest в iOS
URLRequest в iOS (Foundation framework) — это объект, инкапсулирующий информацию, необходимую для выполнения сетевого запроса. Его атрибуты можно разделить на несколько ключевых категорий:
Основные обязательные атрибуты
-
url (URL) — адрес ресурса, обязательный параметр при инициализации. Определяет конечную точку запроса.
let url = URL(string: "https://api.example.com/data")! var request = URLRequest(url: url) -
httpMethod (String) — метод HTTP-запроса (GET, POST, PUT, DELETE и др.). По умолчанию — "GET".
request.httpMethod = "POST" -
httpBody (Data?) — тело запроса для методов POST, PUT. Обычно содержит JSON, XML или form-urlencoded данные.
let jsonData = try JSONEncoder().encode(user) request.httpBody = jsonData -
allHTTPHeaderFields ([String: String]?) — словарь HTTP-заголовков. Устанавливаются напрямую или через методы.
request.allHTTPHeaderFields = ["Authorization": "Bearer token"] // Или через setValue request.setValue("application/json", forHTTPHeaderField: "Content-Type")
Важные дополнительные атрибуты
-
cachePolicy (URLRequest.CachePolicy) — политика кэширования ответа. Влияет на использование кэша. Основные варианты:
- .useProtocolCachePolicy (по умолчанию) — поведение, определенное протоколом
- .reloadIgnoringLocalCacheData — игнорировать кэш
- .returnCacheDataElseLoad — вернуть кэш, если есть, иначе загрузить
- .returnCacheDataDontLoad — вернуть только кэш (офлайн-режим)
-
timeoutInterval (TimeInterval) — максимальное время ожидания ответа в секундах. По умолчанию — 60 секунд.
request.timeoutInterval = 30 -
httpShouldHandleCookies (Bool) — указывает, должна ли система автоматически управлять куками. По умолчанию — true.
-
httpShouldUsePipelining (Bool) — включает HTTP-пипелининг для ускорения последовательных запросов (редко используется).
Специфичные атрибуты (поддержка фоновых задач, стандарты)
-
networkServiceType (URLRequest.NetworkServiceType) — приоритет сетевого трафика. Полезно для фоновых задач:
- .default — обычный трафик
- .background — фоновая загрузка (меньший приоритет)
- .video — потоковое видео (высокий приоритет)
-
allowsCellularAccess (Bool) — разрешить использование мобильного интернета (true по умолчанию).
-
attribution (URLRequest.Attribution) — атрибуция запроса (начиная с iOS 15). Определяет, от чьего имени выполняется запрос:
- **.developer** — от имени разработчика
- **.user** — от имени пользователя (например, при действии пользователя)
Вспомогательные свойства и методы
- addValue(_:forHTTPHeaderField:) — добавляет значение заголовка (можно несколько значений для одного ключа).
- setValue(_:forHTTPHeaderField:) — устанавливает значение заголовка (перезаписывает существующее).
- url? — опциональный URL (хотя инициализатор требует не-nil, свойство опциональное).
Пример комплексного использования
// Создание запроса
guard let url = URL(string: "https://api.example.com/users") else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 30
request.cachePolicy = .reloadIgnoringLocalCacheData
request.allowsCellularAccess = true
request.networkServiceType = .default
// Установка заголовков
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("Bearer abc123", forHTTPHeaderField: "Authorization")
request.addValue("gzip", forHTTPHeaderField: "Accept-Encoding")
// Установка тела запроса
let requestBody = ["name": "John", "age": 30]
let jsonData = try JSONSerialization.data(withJSONObject: requestBody)
request.httpBody = jsonData
// Настройка для iOS 15+
if #available(iOS 15.0, *) {
request.attribution = .user
}
Важно: многие атрибуты взаимосвязаны. Например, при установке httpBody часто требуется также установить заголовок Content-Type. Политика кэширования влияет на поведение как запроса, так и URLSession, к которой он передается.
Для современных приложений также стоит учитывать атрибуты URLSessionConfiguration, которые взаимодействуют с атрибутами запроса — например, waitsForConnectivity, multipathServiceType или настройки прокси.