Как проверить отдается страница из кэша или файла через Bash (Curl)

В консоли bash или аналогичной выполнить запрос:

$ curl -I https://site.com/robots.txt

Получим ответ вида:

$ curl -I https://site.com/robots.txt % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 1057 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0HTTP/1.1 200 OK Server: nginx Date: Sat, 31 May 2025 09:22:26 GMT Content-Type: text/plain;charset=UTF-8 Content-Length: 1057 Connection: keep-alive Vary: HTTPS Last-Modified: Fri, 23 May 2025 15:28:45 GMT ETag: "67b9d20651813063c46408932664cf43" Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN

Как расшифровать ответ сервера?

Получив заголовки (headers), нам нужно обратить внимание на несколько ключевых маркеров. Именно они подскажут, как сформирована страница:

  • Last-Modified и ETag. В нашем примере присутствуют оба этих заголовка. Как правило, их наличие означает, что веб-сервер (Nginx или Apache) отдает физический статический файл. Сервер знает точное время его последнего изменения и сгенерировал для него уникальный идентификатор (ETag). Динамические скрипты (например, чистый PHP без плагинов кэширования) эти заголовки по умолчанию не отдают.
  • Специфичные заголовки кэширования (X-Cache и аналоги). Если на сервере настроен кэширующий прокси (например, Varnish, Nginx FastCGI Cache) или подключена CDN (Cloudflare), ищите заголовки вроде X-Cache, X-Proxy-Cache или CF-Cache-Status.
    • Статус HIT означает, что страница была отдана из кэша (скрипты не дергались, база данных не опрашивалась).
    • Статус MISS или BYPASS означает, что кэш был проигнорирован или пуст, и страница генерировалась сервером на лету.
  • Cache-Control и Age. Заголовок Age (возраст в секундах) также явно указывает на то, что документ был взят из кэша, а не сгенерирован в эту же секунду.
  • Признаки динамической генерации. Если вместо Last-Modified вы видите заголовки X-Powered-By: PHP/..., Set-Cookie (установка новых сессий) и Cache-Control: no-store, no-cache, значит страница каждый раз собирается движком (например, WordPress или Bitrix) заново и не кэшируется.

Таким образом, анализируя HTTP-заголовки через curl -I, можно за пару секунд проверить корректность работы серверного кэша или убедиться, что статика отдается напрямую веб-сервером.

Поделись, если оказалось полезно :)
Нет комментариев

Написать