Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Кэширование HTTP запросов
В основном кэшируются безопасные и идемпотентные GET запросы, так как они не изменяют состояние на сервере. Однако правила кэширования более сложные и зависят от заголовков Cache-Control, ETag, Last-Modified и других механизмов.
Какие запросы кэшируются по умолчанию
По спецификации HTTP (RFC 7231):
- GET запросы — кэшируются по умолчанию (если нет заголовков, запрещающих кэширование)
- HEAD запросы — как и GET, так как они идентичны, только без тела ответа
- POST/PUT/DELETE — НЕ кэшируются по умолчанию (они изменяют состояние)
Управление кэшированием через Cache-Control
Заголовок Cache-Control управляет поведением кэширования:
from fastapi import FastAPI, Response
app = FastAPI()
@app.get("/data")
def get_data(response: Response):
response.headers["Cache-Control"] = "public, max-age=3600"
return {"data": "cacheable"}
@app.get("/user")
def get_user(response: Response):
response.headers["Cache-Control"] = "private, max-age=1800"
return {"user": "John"}
Директивы Cache-Control
- max-age=N — кэшировать N секунд
- public — любой кэш может сохранить
- private — только браузер может кэшировать
- no-cache — проверить на сервере перед использованием
- no-store — не сохранять вообще
- must-revalidate — после истечения max-age переvalidate на сервере
ETag для условного кэширования
from fastapi import FastAPI, Response, status
import hashlib
app = FastAPI()
data = {"content": "Hello World"}
data_hash = hashlib.md5(str(data).encode()).hexdigest()
@app.get("/resource")
def get_resource(request, response: Response):
response.headers["ETag"] = f"\"{data_hash}\""
response.headers["Cache-Control"] = "max-age=0, must-revalidate"
if request.headers.get("If-None-Match") == f"\"{data_hash}\"":
response.status_code = status.HTTP_304_NOT_MODIFIED
return
return data
Что кэшируется в практике
Кэшируется:
- GET запросы к статическим ресурсам
- GET запросы к API с редко меняющимися данными
- Ответы с 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501
НЕ кэшируется:
- POST, PUT, DELETE, PATCH
- Запросы с Authorization заголовком
- Ответы с Set-Cookie
Корректное использование кэширования существенно снижает нагрузку на сервер и улучшает скорость приложения.