← Назад к вопросам

Что такое заголовок в протоколах http и https?

2.0 Middle🔥 111 комментариев
#REST API и HTTP

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Заголовки в HTTP и HTTPS протоколах

Заголовки (headers) — это пары "ключ-значение", которые передаются в HTTP/HTTPS запросах и ответах. Они содержат метаинформацию о передаваемых данных и управляют поведением клиента и сервера.

Структура HTTP сообщения с заголовками

GET /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer token123
User-Agent: Mozilla/5.0

{"name": "John"}

Первая строка — request line, остальное — headers, после пустой строки идет тело (body).

Типы заголовков

Заголовки запроса (Request Headers)

Отправляются клиентом на сервер:

# Пример в Python с requests
import requests

headers = {
    "User-Agent": "Mozilla/5.0",
    "Accept": "application/json",
    "Authorization": "Bearer eyJhbGc...",
    "Content-Type": "application/json",
    "Accept-Language": "en-US",
    "Host": "api.example.com",
}

response = requests.get("https://api.example.com/users", headers=headers)

Основные request headers:

  • Host: Адрес сервера, на который идет запрос (обязателен для HTTP/1.1)
  • User-Agent: Браузер или приложение, отправившее запрос
  • Accept: Какие типы контента клиент хочет получить (text/html, application/json)
  • Accept-Language: Предпочитаемый язык
  • Content-Type: Формат данных в теле запроса
  • Content-Length: Размер тела в байтах
  • Authorization: Учетные данные (токены, пароли)
  • Cookie: Данные сеанса
  • Referer: URL страницы, с которой пришел запрос
  • Cache-Control: Как кешировать ответ

Заголовки ответа (Response Headers)

Отправляются сервером клиенту:

import requests

response = requests.get("https://api.example.com/users")

# Доступ к заголовкам ответа
print(response.headers)
# Output: {Content-Type: application/json, Set-Cookie: ..., ...}

print(response.headers.get("Content-Type"))  # application/json
print(response.headers.get("Cache-Control"))  # max-age=3600

Основные response headers:

  • Content-Type: Формат ответа (application/json, text/html)
  • Content-Length: Размер тела ответа
  • Set-Cookie: Установить cookies в браузер
  • Cache-Control: Как кешировать (max-age=3600, no-cache)
  • Expires: Когда кеш истекает
  • ETag: Версия ресурса для кеша
  • Last-Modified: Дата последнего изменения
  • Server: Какой сервер обработал запрос
  • Access-Control-Allow-Origin: CORS разрешение
  • Location: Перенаправление (HTTP 301, 302)
  • WWW-Authenticate: Тип аутентификации

Работа с заголовками в Python

С помощью requests

import requests

# Отправка заголовков
headers = {
    "Authorization": "Bearer mytoken",
    "X-Custom-Header": "CustomValue",
}
response = requests.post(
    "https://api.example.com/data",
    headers=headers,
    json={"name": "Alice"},
)

# Чтение заголовков ответа
print(response.headers["Content-Type"])  # application/json
print(response.status_code)  # 200
print(response.headers)  # Все заголовки

С помощью FastAPI

from fastapi import FastAPI, Header, Response
from typing import Optional

app = FastAPI()

# Чтение заголовков из запроса
@app.get("/api/users")
def get_users(
    user_agent: Optional[str] = Header(None),
    authorization: Optional[str] = Header(None),
):
    print(f"User-Agent: {user_agent}")
    print(f"Authorization: {authorization}")
    return {"users": []}

# Установка заголовков в ответ
@app.post("/api/data")
def create_data(response: Response):
    response.headers["X-Custom-Header"] = "CustomValue"
    response.headers["Cache-Control"] = "max-age=3600"
    return {"id": 123}

С помощью aiohttp (асинхронные запросы)

import aiohttp
import asyncio

async def fetch_data():
    headers = {
        "Authorization": "Bearer token",
        "User-Agent": "Python/3.10",
    }
    
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.example.com/data",
            headers=headers
        ) as response:
            print(response.headers["Content-Type"])
            data = await response.json()
            return data

asyncio.run(fetch_data())

Различие HTTP vs HTTPS

HTTP и HTTPS используют одинаковые заголовки, разница в защите:

  • HTTP: Заголовки передаются в открытом виде (не зашифрованы)
  • HTTPS: Заголовки зашифрованы TLS протоколом
# Для HTTPS нужно убедиться, что используется SSL сертификат
import requests

# HTTPS запрос (безопасный)
response = requests.get("https://api.example.com/secure")

# Проверка сертификата (по умолчанию True)
response = requests.get(
    "https://api.example.com/secure",
    verify=True  # Проверять SSL сертификат
)

Кастомные заголовки

По конвенции кастомные заголовки начинаются с X-:

headers = {
    "X-API-Version": "2.0",
    "X-Request-ID": "abc123def456",
    "X-Client-Name": "MyApp",
}

Резюме

Заголовки — это критический компонент HTTP, который передает метаинформацию о запросах и ответах. Они контролируют аутентификацию, кеширование, CORS, типы контента и множество других аспектов веб-коммуникации. Python разработчик должен свободно работать с заголовками для создания безопасных и эффективных API.

Что такое заголовок в протоколах http и https? | PrepBro