Из каких основных компонентов состоит HTTP-запрос?

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

Ответ

HTTP-запрос состоит из следующих обязательных и опциональных компонентов:

  1. Метод (HTTP Method): Определяет тип операции.

    • GET — получение ресурса.
    • POST — создание ресурса.
    • PUT / PATCH — полное/частичное обновление.
    • DELETE — удаление ресурса.
    • HEAD, OPTIONS — служебные методы.
  2. URL (Uniform Resource Locator): Адрес целевого ресурса.

    • Может включать query-параметры: https://api.example.com/users?page=2&limit=20.
  3. Заголовки (Headers): Метаданные запроса.

    • Content-Type — тип данных тела (application/json, application/x-www-form-urlencoded).
    • Authorization — токен аутентификации (Bearer <token>).
    • User-Agent, Accept, Cache-Control и др.
  4. Тело запроса (Body): Данные, отправляемые на сервер (используется с POST, PUT).

    • Чаще всего в формате JSON, XML или бинарных данных.

Пример формирования запроса на Swift:

// 1. URL с query-параметрами
let url = URL(string: "https://api.example.com/posts")!

// 2. Создание запроса
var request = URLRequest(url: url)
request.httpMethod = "POST"

// 3. Установка заголовков
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("Bearer YOUR_TOKEN", forHTTPHeaderField: "Authorization")

// 4. Подготовка тела запроса (JSON)
let postData: [String: Any] = ["title": "New Post", "body": "Content"]
request.httpBody = try? JSONSerialization.data(withJSONObject: postData)

// 5. Отправка
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    // Обработка ответа
}
task.resume()