Ответ
HTTP (HyperText Transfer Protocol) — это протокол прикладного уровня, который является основой для передачи данных в вебе. Он работает по клиент-серверной модели: клиент (например, браузер) отправляет запрос, а сервер возвращает ответ.
Ключевые особенности HTTP:
- Текстовый формат: Сообщения HTTP (запросы и ответы) легко читаемы человеком, что упрощает отладку.
- Отсутствие состояния (Stateless): Сервер не хранит информацию о предыдущих запросах от одного и того же клиента. Каждый запрос обрабатывается независимо. Для сохранения состояния используются механизмы вроде Cookies или сессий.
- Расширяемость: Протокол можно расширять с помощью кастомных заголовков (headers).
Структура HTTP-сообщения:
- Стартовая строка: Определяет тип сообщения (например,
GET /index.html HTTP/1.1
для запроса илиHTTP/1.1 200 OK
для ответа). - Заголовки (Headers): Пары ключ-значение, содержащие метаинформацию о сообщении (например,
Content-Type: application/json
). - Тело сообщения (Body): Необязательная часть, содержащая сами данные (например, HTML-страницу или JSON-объект).
Основные методы:
GET
: Запрос на получение ресурса.POST
: Отправка данных на сервер для создания нового ресурса.PUT
: Полное обновление существующего ресурса.PATCH
: Частичное обновление ресурса.DELETE
: Удаление ресурса.
Коды состояния ответа:
2xx
(Success):200 OK
,201 Created
3xx
(Redirection):301 Moved Permanently
4xx
(Client Error):400 Bad Request
,404 Not Found
,403 Forbidden
5xx
(Server Error):500 Internal Server Error
Пример HTTP-запроса в Go:
// Выполняем GET-запрос на указанный URL
resp, err := http.Get("https://example.com")
if err != nil {
log.Fatalf("Ошибка при выполнении запроса: %v", err)
}
// defer гарантирует, что тело ответа будет закрыто после завершения функции
defer resp.Body.Close()
// Читаем тело ответа
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatalf("Ошибка при чтении ответа: %v", err)
}
fmt.Println(string(body))