Что такое заголовок в протоколах http и https?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Заголовки в 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.