← Cloudflare Cache / cache / reference
Использование заголовков ETag в Cloudflare
ETag headers identify whether the version of a resource cached in the browser is the same as the resource at the origin web server. A visitor's browser stores ETags. When a visitor revisits a site, the browser compares each ETag to the one it stored. Matching values cause a 304 Not-Modified HTTP ответ, указывающий, что кешированная версия ресурса актуальна. Cloudflare поддерживает как строгие, так и слабые ETags, настроенные на вашем веб-сервере источника.
Слабые ETag
Слабые заголовки ETag показывают, что закэшированный ресурс семантически эквивалентен версии на веб-сервере, но не обязательно совпадает с ней побайтово.
Строгие ETags
Строгие заголовки ETag гарантируют, что ресурс в кеше браузера и на веб-сервере идентичен побайтово. Используйте Cache Rules чтобы включить строгие заголовки ETag.
Поведение при включённой настройке Respect Strong ETags
При включении Respect Strong ETags в правиле кэширования, Cloudflare будет использовать строгую проверку заголовка ETag, чтобы убедиться, что ресурсы в кэше Cloudflare и на исходном сервере идентичны побайтово.
Однако в некоторых случаях Cloudflare преобразует строгие ETag в слабые. Например, при следующих условиях:
- Respect Strong ETags включён
- Сжатие Brotli включён
- Ответ исходного сервера включает
etag: "foobar"строгий заголовок ETag
Сеть Cloudflare предпримет следующие действия в зависимости от accept-encoding заголовок и сжатие, используемое в ответе исходного сервера:
accept-encodingзаголовок от посетителя |
Сжатие, используемое в ответе сервера-источника | Действия Cloudflare |
|---|---|---|
gzip, br |
GZIP | Возврат посетителю ответа, сжатого GZIP, со строгим заголовком ETag: etag: "foobar". |
gzip, br |
Brotli | Возврат посетителю ответа, сжатого Brotli, со строгим заголовком ETag: etag: "foobar". |
br |
GZIP | Распаковать GZIP и вернуть посетителю несжатый ответ со слабым заголовком ETag: etag: W/"foobar". |
gzip |
Brotli | Распаковать Brotli и вернуть посетителю несжатый ответ со слабым заголовком ETag: etag: W/"foobar". |
gzip |
(нет) | Возврат посетителю несжатого ответа со строгим заголовком ETag: etag: "foobar". |
gzip, br, zstd |
Zstandard | Возврат посетителю ответа, сжатого zstd, со строгим заголовком ETag: etag: "foobar". |
gzip, br |
Zstandard | Распаковать zstd и вернуть посетителю ответ br со слабым заголовком ETag: etag: W/"foobar". |
zstd |
Brotli/GZIP | Распаковать zstd и вернуть посетителю ответ zstd со слабым заголовком ETag: etag: W/"foobar". |
Включение Respect Strong ETags в Cloudflare автоматически отключает Rocket Loader, Email Obfuscation и Automatic HTTPS Rewrites.
Поведение при отключённой настройке Respect Strong ETags
Когда Respect Strong ETags отключён, Cloudflare сохранит строгие заголовки ETag, заданные исходным веб-сервером, если выполняются все следующие условия:
- Исходный сервер отправляет ответ, сжатый с помощью GZIP или Brotli, либо несжатый ответ.
- Если исходный сервер отправляет сжатый ответ, а посетитель поддерживает то же сжатие (GZIP, Brotli), согласно
accept-encodingзаголовок. - Rocket Loader и Email Obfuscation функции отключены.
Во всех остальных случаях Cloudflare либо преобразует строгие заголовки ETag в слабые, либо удаляет строгий ETag. Например, при следующих условиях:
- Respect Strong ETags отключён
- Сжатие Brotli включён
- Ответ исходного сервера включает
etag: "foobar"строгий заголовок ETag
Сеть Cloudflare предпримет следующие действия в зависимости от accept-encoding заголовок и сжатие, используемое в ответе исходного сервера:
accept-encodingзаголовок от посетителя |
Сжатие, используемое в ответе сервера-источника | Действия Cloudflare |
|---|---|---|
gzip, br |
GZIP | Распаковать GZIP и вернуть посетителю ответ, сжатый Brotli (так как сжатие Brotli включено), со слабым заголовком ETag: etag: W/"foobar". |
gzip, br |
Brotli | Возврат посетителю ответа, сжатого Brotli, со строгим заголовком ETag: etag: "foobar". |
br |
GZIP | Распаковать GZIP и вернуть посетителю ответ, сжатый Brotli, со слабым заголовком ETag: etag: W/"foobar". |
gzip |
Brotli | Распаковать Brotli и вернуть посетителю ответ, сжатый GZIP, со слабым заголовком ETag: etag: W/"foobar". |
gzip |
(нет) | Сжать ответ источника с помощью GZIP и вернуть его посетителю со слабым заголовком ETag: etag: W/"foobar". |
gzip, br, zstd |
Zstandard | Возврат посетителю ответа, сжатого zstd, со строгим заголовком ETag: etag: "foobar". |
gzip, br |
Zstandard | Распаковать zstd и вернуть посетителю несжатый ответ со слабым заголовком ETag: etag: W/"foobar". |
zstd |
Brotli | Распаковать zstd и вернуть посетителю несжатый ответ со слабым заголовком ETag: etag: W/"foobar". |
См. Сжатие контента, где это описано подробнее.
Важные примечания
-
Значение необходимо задать в строгом заголовке ETag в двойных кавычках (например,
etag: "foobar"). Если использовать неверный формат, Cloudflare удалит заголовок ETag вместо преобразования его в слабый ETag. -
Если ресурс можно кешировать и происходит промах кеша, Cloudflare не отправляет заголовки ETag на исходный сервер. Это связано с тем, что для заполнения кеша Cloudflare требуется полное тело ответа.
-
Если ваш источник (или R2) применяет сжатие на основе
accept-encoding, будет закеширован первый тип сжатия. Оцените, подходят ли строгие ETag для вашего сценария использования, либо используйте правила cache key для обработки разных типов сжатия.