По умолчанию на рабочих сайтах не отображается заголовок Cache-Control
, но вы можете настроить его для этого. (ИЗМЕНИТЬ, чтобы уточнить: рабочие сайты по умолчанию кэшируются на стороне Cloudflare и поддерживают etags для повторной проверки. Заголовок Cache-Control
определяет, кэшируются ли они также в браузере. без повторной валидации.)
Обратите внимание, что рабочие сайты работают совсем не так, как Cloudflare с классическим исходным сервером. Если вы читаете что-то о кешировании в Cloudflare, но в нем конкретно не упоминаются рабочие сайты, то, вероятно, это не относится к рабочим сайтам.
С Workers Sites ваш сайт обслуживается Cloudflare Worker - кодом, который запускается непосредственно на серверах Cloudflare. Итак, у вас нет исходного сервера за Cloudflare, и кеш Cloudflare не работает нормально. Код Worker полностью отвечает за обслуживание контента, включая установку любых заголовков, таких как Cache-Control
.
Фактически, когда вы создаете новый проект Workers Sites с помощью wrangler
, код для этого Worker создается для вас, но вы можете его редактировать! Вы можете настроить код все, что хотите, делать все, что хотите. Код для Worker находится в каталоге вашего проекта в workers-site/index.js
. Код выглядит так - - фактически, он инициализируется как копия этого файла с GitHub.
Этот рабочий код зависит от библиотеки (модуля npm), называемой @cloudflare/kv-asset-handler
, для выполнения большей части Работа. Эту библиотеку можно настроить для обработки кэширования различными способами с помощью параметра cacheControl
.
Но где установить эту опцию? Что ж, в вашем рабочем коде!
Откройте workers-site/index.js
и найдите часть, которая выглядит так:
async function handleEvent(event) {
const url = new URL(event.request.url)
let options = {}
/**
* You can add custom logic to how we fetch your assets
* by configuring the function `mapRequestToAsset`
*/
// options.mapRequestToAsset = handlePrefix(/^\/docs/)
В комментарии упоминается один из способов, которым вы можете использовать options
для настройки обслуживания вашего сайта, но вы также можете указать здесь cacheControl
. Попробуйте добавить это:
options.cacheControl = {
browserTTL: 3600 // 1 hour
}
Теперь повторно разверните свой сайт, и вы должны увидеть, что ресурсы обслуживаются с помощью Cache-Control: max-age=3600
. Конечно, это означает, что ваш контент может кэшироваться в браузерах людей до часа (3600 секунд); вы можете предпочесть более длительный или более короткий период.
Обратите внимание: если вы не программист, все это может показаться немного сложным. Рабочие сайты действительно предназначены для людей, которые хотят иметь возможность настраивать обслуживание своих сайтов, редактируя код JavaScript. Для тех, кто не заинтересован в написании кода, вы будете ограничены поведением по умолчанию, которое может соответствовать вашим потребностям, а может и не соответствовать.
person
Kenton Varda
schedule
11.10.2020
cache-control: no-cache
ни в одном из полученных мной ответов. В частности, файлы css и woff2, похоже, вообще не имеют заголовка управления кешем, но cf-cache-status показывает, что они кэшируются Cloudflare. В каком контексте вы видитеno-cache
? - person Kenton Varda   schedule 10.10.2020cache-control
. Я вижу аналогичные результаты на других сайтах, которые, как мне известно, являются сайтами рабочих. Однако: теперь, после многих часов дополнительного поиска, чем я уже делал, я нахожу больше информации (на сайте CF и за его пределами), которая лучше объясняет это. Спасибо за ответ, сэр. - person Bryce Wray   schedule 11.10.2020