CDN · 2026-05-09 · 5 min read5 мин чтения

Static SDK, dynamic API: splitting cache rules on one domainСтатичный SDK, динамичный API: разные правила кэша на одном домене

Serving everything from one delivery domain keeps integration simple — one host, one TLS cert. But a single domain carries two opposite needs: the SDK bundle wants to be cached for as long as possible, and the session API must never be cached at all.

The split is by path prefix:

# cache hard
/sdk/player.js          → Cache-Control: public, max-age=3600
# never cache
/api/                   → Cache-Control: no-store, bypass at edge

On the CDN we mark the /api/ prefix as bypass and let static extensions cache normally. The origin reinforces it with no-store on dynamic responses, so even a misconfigured edge can't accidentally pin a session delta.

The gotcha

Query strings. If the edge folds ?offset=1 and ?offset=2 into one cache key, every poll returns the same stale delta. Disable query-string caching for the session path — or just bypass the whole prefix, which is what we do.

Отдавать всё с одного домена раздачи удобно — один хост, один TLS-сертификат. Но один домен несёт две противоположные потребности: бандл SDK хочет кэшироваться как можно дольше, а session API нельзя кэшировать вообще.

Разделение — по префиксу пути:

# кэшируем жёстко
/sdk/player.js          → Cache-Control: public, max-age=3600
# не кэшируем никогда
/api/                   → Cache-Control: no-store, bypass на edge

На CDN мы помечаем префикс /api/ как bypass, а статичным расширениям даём кэшироваться нормально. Origin подкрепляет это заголовком no-store на динамических ответах, так что даже неправильно настроенный edge не закрепит дельту сессии случайно.

Подвох

Query string. Если edge сворачивает ?offset=1 и ?offset=2 в один ключ кэша, каждый поллинг отдаёт одну и ту же устаревшую дельту. Отключите кэширование по query для session-пути — или просто байпасьте весь префикс, что мы и делаем.

Back to blogНазад в блог