Ответ
HTTP-запрос — это текстовое сообщение, которое клиент (например, браузер) отправляет серверу. Он состоит из трёх основных частей:
Стартовая (запросная) строка (Request Line)
Содержит три элемента, разделенных пробелами:- Метод (Method):
GET
,POST
,PUT
,DELETE
и др. Определяет действие, которое нужно выполнить. - URI (Uniform Resource Identifier): Путь к ресурсу на сервере, например
/users/123
. - Версия HTTP: Обычно
HTTP/1.1
илиHTTP/2
.
Пример:GET /api/v1/articles?page=2 HTTP/1.1
- Метод (Method):
Заголовки (Headers)
Парыключ: значение
, которые передают дополнительную информацию о запросе. Каждый заголовок находится на новой строке.Host
: Обязательный заголовок, указывающий домен сервера.Content-Type
: Тип данных в теле запроса (например,application/json
).Authorization
: Данные для аутентификации (например,Bearer <token>
).User-Agent
: Информация о клиенте, отправившем запрос.
Тело запроса (Body)
Опциональная часть, содержащая данные, которые отправляются на сервер. Используется в основном с методамиPOST
,PUT
,PATCH
для отправки данных (например, в формате JSON или как данные формы).
Пример создания HTTP-запроса в Go:
import (
"net/http",
"strings"
)
// Данные для тела запроса
jsonData := `{"name":"Alice", "age":30}`
// Создаем новый POST-запрос
// strings.NewReader создает io.Reader, который необходим для тела запроса
req, err := http.NewRequest("POST", "https://example.com/api/users", strings.NewReader(jsonData))
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)