Кэшируются ли GET-запросы?

«Кэшируются ли GET-запросы?» — вопрос из категории HTTP и веб-протоколы, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, GET-запросы могут кэшироваться, и это критически важный аспект для тестирования производительности и корректности веб-приложений. Кэширование контролируется HTTP-заголовками.

Ключевые заголовки для проверки в тестах:

  • Cache-Control: Директивы max-age, no-cache, no-store.
  • Expires: Устаревшая дата истечения срока действия.
  • ETag / Last-Modified: Для условных запросов (статус 304 Not Modified).

Практический пример тестирования: При тестировании API я использую Postman или скрипты на Python, чтобы убедиться, что кэширование работает как задумано.

import requests

# Первый запрос - должен вернуть 200 OK и данные
response1 = requests.get('https://api.example.com/data')
print(f'First request: {response1.status_code}')  # 200
print(f'Headers: {response1.headers.get("Cache-Control")}')

# Повторный запрос с теми же параметрами - может вернуть 304 Not Modified,
# если клиент отправил заголовок If-None-Match с полученным ETag.
# Или данные могут быть взяты из локального кэша браузера/прокси.

Для тестирования негативных сценариев нужно проверять, что запросы к динамическим данным или персональным разделам (/api/user/profile) имеют заголовки Cache-Control: private, no-store.