Ответ
HTTP-запрос — это текстовое сообщение, которое клиент (например, браузер) отправляет серверу. Он имеет четкую структуру и состоит из следующих частей:
-
Стартовая строка (Request Line) Содержит три элемента, разделенных пробелами:
- Метод (Method): Тип запроса (
GET,POST,PUT,DELETEи т.д.). - URI (Uniform Resource Identifier): Путь к запрашиваемому ресурсу (например,
/users/123). - Версия HTTP: Версия протокола (например,
HTTP/1.1илиHTTP/2). Пример:GET /api/search?q=golang HTTP/1.1
- Метод (Method): Тип запроса (
-
Заголовки (Headers) Строки в формате
ключ: значение, которые передают метаинформацию о запросе. Примеры популярных заголовков:Host: доменное имя сервера.Content-Type: MIME-тип тела запроса (например,application/json).Authorization: данные для аутентификации (например,Bearer <token>).User-Agent: информация о клиенте.
-
Пустая строка-разделитель Одна пустая строка (
CRLF), которая является обязательным разделителем между заголовками и телом запроса. -
Тело запроса (Body) Необязательная часть, содержащая данные, которые отправляются на сервер. Обычно используется с методами
POST,PUT,PATCH. Пример тела в формате JSON:{"username": "alex", "score": 100}
В Go для создания HTTP-запроса используется пакет net/http:
import (
"net/http",
"strings"
)
// Создаем тело запроса
requestBody := strings.NewReader(`{"name": "John Doe"}`)
// Формируем запрос
req, err := http.NewRequest("POST", "https://example.com/api/users", requestBody)
if err != nil {
// обработка ошибки
}
// Добавляем заголовки
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer my-secret-token")
// Далее запрос можно выполнить с помощью http.Client
// client := &http.Client{}
// resp, err := client.Do(req)