← Назад к вопросам

Какие знаешь атрибуты у запроса?

1.0 Junior🔥 201 комментариев
#Работа с сетью

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Атрибуты URLRequest в iOS

URLRequest в iOS (Foundation framework) — это объект, инкапсулирующий информацию, необходимую для выполнения сетевого запроса. Его атрибуты можно разделить на несколько ключевых категорий:

Основные обязательные атрибуты

  1. url (URL) — адрес ресурса, обязательный параметр при инициализации. Определяет конечную точку запроса.

    let url = URL(string: "https://api.example.com/data")!
    var request = URLRequest(url: url)
    
  2. httpMethod (String) — метод HTTP-запроса (GET, POST, PUT, DELETE и др.). По умолчанию — "GET".

    request.httpMethod = "POST"
    
  3. httpBody (Data?) — тело запроса для методов POST, PUT. Обычно содержит JSON, XML или form-urlencoded данные.

    let jsonData = try JSONEncoder().encode(user)
    request.httpBody = jsonData
    
  4. allHTTPHeaderFields ([String: String]?) — словарь HTTP-заголовков. Устанавливаются напрямую или через методы.

    request.allHTTPHeaderFields = ["Authorization": "Bearer token"]
    // Или через setValue
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    

Важные дополнительные атрибуты

  1. cachePolicy (URLRequest.CachePolicy) — политика кэширования ответа. Влияет на использование кэша. Основные варианты:

    • .useProtocolCachePolicy (по умолчанию) — поведение, определенное протоколом
    • .reloadIgnoringLocalCacheData — игнорировать кэш
    • .returnCacheDataElseLoad — вернуть кэш, если есть, иначе загрузить
    • .returnCacheDataDontLoad — вернуть только кэш (офлайн-режим)
  2. timeoutInterval (TimeInterval) — максимальное время ожидания ответа в секундах. По умолчанию — 60 секунд.

    request.timeoutInterval = 30
    
  3. httpShouldHandleCookies (Bool) — указывает, должна ли система автоматически управлять куками. По умолчанию — true.

  4. httpShouldUsePipelining (Bool) — включает HTTP-пипелининг для ускорения последовательных запросов (редко используется).

Специфичные атрибуты (поддержка фоновых задач, стандарты)

  1. networkServiceType (URLRequest.NetworkServiceType) — приоритет сетевого трафика. Полезно для фоновых задач:

    • .default — обычный трафик
    • .background — фоновая загрузка (меньший приоритет)
    • .video — потоковое видео (высокий приоритет)
  2. allowsCellularAccess (Bool) — разрешить использование мобильного интернета (true по умолчанию).

  3. 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 или настройки прокси.

Какие знаешь атрибуты у запроса? | PrepBro