Ответ
HTTP-сообщение — это основная единица обмена данными в протоколе HTTP. Существует два типа сообщений: запрос (от клиента к серверу) и ответ (от сервера к клиенту). Оба имеют схожую структуру: стартовая строка, заголовки и, опционально, тело сообщения.
HTTP-запрос (Request)
1. Стартовая строка (Start Line): Содержит три элемента:
- Метод:
GET
,POST
,PUT
,DELETE
и др. Определяет действие, которое нужно выполнить. - URI (Uniform Resource Identifier): Путь к ресурсу, например
/users/123
. - Версия HTTP: Например,
HTTP/1.1
илиHTTP/2
.
2. Заголовки (Headers): Пары Ключ: Значение
, которые передают метаинформацию о запросе (например, Host
, User-Agent
, Accept
, Content-Type
).
3. Тело (Body): Необязательная часть, содержащая данные, отправляемые на сервер (например, JSON-объект в POST-запросе). Отделяется от заголовков пустой строкой.
Пример запроса:
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 27
{"username": "test", "age": 30}
HTTP-ответ (Response)
1. Стартовая строка (Status Line): Содержит три элемента:
- Версия HTTP:
HTTP/1.1
. - Код состояния: Числовой код, сообщающий о результате запроса (
200
,404
,500
). - Пояснение: Текстовое описание кода состояния (
OK
,Not Found
,Internal Server Error
).
2. Заголовки (Headers): Пары Ключ: Значение
, описывающие ответ (Content-Type
, Content-Length
, Server
).
3. Тело (Body): Необязательная часть, содержащая запрошенный ресурс или информацию об ошибке.
Пример ответа:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 17
{"status": "ok"}
В Go для работы с HTTP используется стандартный пакет net/http
.