Какой HTTP-заголовок указывает тип передаваемых данных (Content-Type)?

«Какой HTTP-заголовок указывает тип передаваемых данных (Content-Type)?» — вопрос из категории Сети, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тип контента указывается в заголовке Content-Type. Он сообщает серверу (в запросе) или клиенту (в ответе), в каком формате представлены данные в теле сообщения (body).

Распространенные значения:

  • application/json — для данных в формате JSON.
  • application/x-www-form-urlencoded — для данных HTML-форм.
  • multipart/form-data — для загрузки файлов.
  • text/html, image/png — для конкретных типов контента.

Пример установки заголовка в URLRequest:

var request = URLRequest(url: url)
request.httpMethod = "POST"
// Ключевой заголовок для JSON
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

let userData = ["name": "John"]
request.httpBody = try JSONEncoder().encode(userData)

Пример проверки типа ответа:

URLSession.shared.dataTask(with: request) { data, response, error in
    guard let httpResponse = response as? HTTPURLResponse,
          httpResponse.statusCode == 200,
          let mimeType = httpResponse.mimeType,
          mimeType == "application/json" else {
        // Обработка ошибки несоответствия типа
        return
    }
    // Декодируем JSON-данные
    let model = try JSONDecoder().decode(Model.self, from: data!)
}.resume()

Важно: Для multipart/form-data значение заголовка также включает уникальный разделитель (boundary), например: Content-Type: multipart/form-data; boundary=Boundary-ABC123.