← Назад к вопросам
Что такое заголовок в протоколах http и https?
2.0 Middle🔥 111 комментариев
#Сети и протоколы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
HTTP/HTTPS Заголовки: метаинформация запросов и ответов
Заголовки (Headers) в HTTP/HTTPS — это пары "ключ: значение", которые передают метаинформацию о запросе или ответе. Они находятся между строкой запроса и телом сообщения, разделены символом CRLF (\r\n).
Анатомия HTTP запроса
GET /api/users/123 HTTP/1.1\r\n ← Строка запроса
Host: api.example.com\r\n ←
Content-Type: application/json\r\n ← Заголовки
Authorization: Bearer token123\r\n ←
User-Agent: MyApp/1.0\r\n ←
\r\n ← Пустая строка
{"name": "John"} ← Тело (body)
Анатомия HTTP ответа
HTTP/1.1 200 OK\r\n ← Строка ответа
Content-Type: application/json\r\n ←
Content-Length: 27\r\n ← Заголовки
Cache-Control: max-age=3600\r\n ←
Set-Cookie: session=abc123\r\n ←
\r\n ← Пустая строка
{"id": 123, "name": "John"} ← Тело ответа
Категории заголовков
1. Заголовки запроса (Request Headers)
Отправляют информацию о клиенте и требованиях:
// Примеры основных заголовков запроса
Host: api.example.com // Хост и порт сервера
User-Agent: Mozilla/5.0 (Windows NT 10.0) // Информация о клиенте
Accept: application/json, text/plain // Какой формат ответа принимаем
Accept-Language: en-US, ru-RU // Предпочитаемые языки
Accept-Encoding: gzip, deflate, br // Поддерживаемые сжатия
Authorization: Bearer eyJhbGc... // Аутентификация
Cookie: session_id=abc123; user_id=456 // Куки для сессии
Referer: https://example.com/page // Откуда перешли
X-Requested-With: XMLHttpRequest // Признак AJAX запроса
Content-Type: application/json // Формат тела запроса
Content-Length: 27 // Размер тела
Cache-Control: no-cache // Указание на кэширование
2. Заголовки ответа (Response Headers)
Отправляют информацию о сервере и содержимом:
Content-Type: application/json; charset=utf-8 // Тип содержимого
Content-Length: 1024 // Размер тела
Content-Encoding: gzip // Применённое сжатие
Cache-Control: max-age=3600, public // Правила кэширования
ETag: "123abc456" // Уникальный идентификатор версии
Last-Modified: Wed, 21 Oct 2024 07:28:00 GMT // Дата последнего обновления
Set-Cookie: session=xyz789; Path=/; Max-Age=7200 // Установка куки
Cors: Access-Control-Allow-Origin: * // CORS разрешения
Strict-Transport-Security: max-age=31536000 // HTTPS enforcement
X-Content-Type-Options: nosniff // Защита от MIME sniffing
X-Frame-Options: DENY // Защита от clickjacking
Location: /api/users/456 // Новое местоположение ресурса
Set-Cookie: auth=token; HttpOnly; Secure // Безопасная кука
Практический пример: обработка заголовков в C++
#include <iostream>
#include <map>
#include <string>
#include <curl/curl.h>
// Парсинг заголовков запроса
std::map<std::string, std::string> parseHeaders(const std::string& rawHeaders) {
std::map<std::string, std::string> headers;
std::istringstream stream(rawHeaders);
std::string line;
while (std::getline(stream, line)) {
if (line.empty()) break; // Пустая строка указывает конец заголовков
size_t colonPos = line.find(':');
if (colonPos != std::string::npos) {
std::string key = line.substr(0, colonPos);
std::string value = line.substr(colonPos + 2); // Пропускаем ": "
headers[key] = value;
}
}
return headers;
}
// Создание запроса с заголовками
class HttpClient {
public:
void makeRequest(const std::string& url) {
CURL* curl = curl_easy_init();
// Создаём структуру заголовков
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "Authorization: Bearer mytoken123");
headers = curl_slist_append(headers, "X-Custom-Header: MyValue");
headers = curl_slist_append(headers, "Accept-Encoding: gzip");
// Устанавливаем заголовки
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
// Выполняем запрос
CURLcode res = curl_easy_perform(curl);
// Очищаем
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
};
Важные заголовки для backend разработчика
1. Content-Type
// Указывает формат тела запроса/ответа
Content-Type: application/json // JSON данные
Content-Type: application/x-www-form-urlencoded // Форма
Content-Type: multipart/form-data // Загрузка файлов
Content-Type: text/html; charset=utf-8 // HTML
Content-Type: image/jpeg // Изображение
Content-Type: application/octet-stream // Бинарные данные
2. Authorization
// Аутентификация
Authorization: Basic dXNlcjpwYXNz // Base64(user:pass)
Authorization: Bearer eyJhbGciOiJIUzI1NiJ... // JWT токен
Authorization: ApiKey sk_live_123456 // API ключ
3. Cache-Control
// Управление кэшированием
Cache-Control: public, max-age=3600 // Кэшируй 1 час, публичный
Cache-Control: private, max-age=60 // Кэшируй 1 мин, только приватный
Cache-Control: no-cache, no-store // Не кэшируй
Cache-Control: max-age=0 // Всегда проверяй актуальность
4. CORS заголовки
// Контроль доступа между доменами
Access-Control-Allow-Origin: * // Разреши всем
Access-Control-Allow-Origin: https://example.com // Разреши конкретному домену
Access-Control-Allow-Methods: GET, POST, PUT // Разреши методы
Access-Control-Allow-Headers: Content-Type, Authorization // Разреши заголовки
Access-Control-Allow-Credentials: true // Разреши куки
5. Безопасность
Strict-Transport-Security: max-age=31536000 // Используй HTTPS
X-Content-Type-Options: nosniff // Не угадывай тип
X-Frame-Options: DENY // Защита от clickjacking
X-XSS-Protection: 1; mode=block // Защита от XSS
Content-Security-Policy: default-src 'self' // Контроль источников
Пример полного HTTP обмена
=== ЗАПРОС ===
POST /api/users HTTP/1.1
Host: api.example.com:8080
Content-Type: application/json
Content-Length: 27
Authorization: Bearer token123
User-Agent: MyApp/1.0
{"name": "John Doe"}
=== ОТВЕТ ===
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 42
Location: /api/users/123
Set-Cookie: session=xyz; Path=/; Max-Age=3600
ETag: "v1"
Cache-Control: no-cache
{"id": 123, "name": "John Doe"}
Обработка заголовков в современном backend
FastAPI (Python)
from fastapi import FastAPI, Header
from typing import Optional
app = FastAPI()
@app.post("/api/users")
async def create_user(
x_token: str = Header(...), # Требуемый заголовок
user_agent: Optional[str] = Header(None), # Опциональный
authorization: str = Header(None)
):
return {"token_received": x_token}
Express.js (Node.js)
app.post('/api/users', (req, res) => {
const token = req.get('authorization'); // Получить заголовок
const contentType = req.get('content-type');
res.set('X-Custom-Header', 'value'); // Установить заголовок
res.json({success: true});
});
Итог
Заголовки HTTP/HTTPS — это критически важный механизм передачи метаинформации. Для backend разработчика необходимо понимать:
- Основные типы заголовков и их назначение
- Безопасность (Authorization, CORS, CSP)
- Производительность (Cache-Control, ETag, Encoding)
- Правильная обработка в коде
- Взаимодействие между клиентом и сервером
Неправильное использование заголовков может привести к проблемам с безопасностью, производительностью и совместимостью.