Ответ
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)