← Cloudflare Workers / workers / static-assets
Headers
Заголовки по умолчанию
При обслуживании статических ресурсов Workers по умолчанию добавляет к ответу ряд заголовков. Вот они:
-
Content-TypeA
Content-Typeзаголовок добавляется к ответу, если он указан во время процесс загрузки ресурсов. Wrangler автоматически определяет MIME-тип файла на основе его расширения. -
Cache-Control: public, max-age=0, must-revalidateОтправляется, если в запросе отсутствует
AuthorizationилиRangeзаголовок, этот заголовок ответа сообщает браузеру, что ассет можно кешировать, но перед каждым использованием браузер должен заново проверять актуальность содержимого. Такое поведение по умолчанию обеспечивает хорошую производительность сайта для статических страниц и при этом гарантирует, что устаревшее содержимое никогда не будет отдано. -
ETagЭтот заголовок дополняет заголовок по умолчанию
Cache-Controlзаголовок. Его значение представляет собой хеш файла статического ассета, и браузеры могут использовать его в последующих запросах сIf-None-Matchзаголовок для проверки актуальности, без необходимости повторно загружать весь файл в случае совпадения. -
CF-Cache-StatusЭтот заголовок показывает, был ли объект отдан из кеша (
HIT) или нет (MISS).1
Cloudflare оставляет за собой право в любой момент добавлять новые заголовки к ответам со статическими ресурсами, чтобы повысить производительность или усилить безопасность вашего Worker-приложения.
Пользовательские заголовки
Заголовки ответа по умолчанию, которые передаются в ответах со статическими ресурсами, можно переопределить, удалить или дополнить, создав обычный текстовый файл с именем _headers без расширения файла, в каталоге статических ресурсов вашего проекта. Сам этот файл не будет отдаваться как статический ресурс: вместо этого он будет разобран Workers, а его правила будут применены к ответам со статическими ресурсами.
Если вы используете фреймворк, у вас часто будет каталог с именем public/ или static/, и обычно содержит готовые к развёртыванию ресурсы, такие как favicon, robots.txt файлы и манифесты сайта. Эти файлы копируются в итоговый выходной каталог во время сборки, поэтому это идеальное место для написания ваших _headers файле. Если вы не используете фреймворк, _headers файл можно поместить прямо в ваш каталог статических ресурсов.
Заголовки, определённые в _headers файле переопределяют то, что Cloudflare отправляет по умолчанию.
Добавить заголовок
Правила заголовков задаются многострочными блоками. Первая строка блока указывает URL или шаблон URL, к которому должны применяться заголовки этого правила. На следующей строке с отступом необходимо указать список имён и значений заголовков:
[url]
[name]: [value]Использование абсолютных URL поддерживается, однако учтите, что абсолютные URL должны начинаться с https и указание порта не поддерживается. _headers правила игнорируют порт и протокол входящего запроса при сопоставлении. Например, правило вида https://example.com/path будет сопоставляться с запросами к other://example.com:1234/path.
Можно определить сколько угодно [name]: [value] пар в следующих строках по мере необходимости. Например:
# This is a comment
/secure/page
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer
/static/*
Access-Control-Allow-Origin: *
X-Robots-Tag: nosnippet
https://myworker.mysubdomain.workers.dev/*
X-Robots-Tag: noindexВходящий запрос, соответствующий шаблонам URL нескольких правил, наследует заголовки всех этих правил. Используя предыдущий _headers файле к следующим запросам будут применены указанные заголовки:
| Request URL | Headers |
|---|---|
https://custom.domain/secure/page |
X-Frame-Options: DENY X-Content-Type-Options: nosniff Referrer-Policy: no-referrer |
https://custom.domain/static/image.jpg |
Access-Control-Allow-Origin: * X-Robots-Tag: nosnippet |
https://myworker.mysubdomain.workers.dev/home ↗ |
X-Robots-Tag: noindex |
https://myworker.mysubdomain.workers.dev/secure/page ↗ |
X-Frame-Options: DENY X-Content-Type-Options: nosniff Referrer-Policy: no-referrer X-Robots-Tag: noindex |
https://myworker.mysubdomain.workers.dev/static/styles.css ↗ |
Access-Control-Allow-Origin: * X-Robots-Tag: nosnippet, noindex |
Вы можете задать до 100 правил заголовков. Каждая строка в _headers файл имеет лимит в 2,000 символов. Вся строка, включая пробелы, имя заголовка и значение, учитывается в этом лимите.
Если заголовок применяется дважды в _headers файле значения объединяются через запятую.
Отсоединить заголовок
Вы можете убрать заголовок по умолчанию или заголовок, добавленный более общим правилом. Для этого добавьте перед именем заголовка восклицательный знак и пробел (! ).
/*
Content-Security-Policy: default-src 'self';
/*.jpg
! Content-Security-PolicyСоответствие пути
Те же функции сопоставления URL, которые _redirects предлагает, также доступно для _headers файле. Учтите, однако, что редиректы применяются раньше заголовков, поэтому если запрос подпадает и под редирект, и под заголовок, приоритет получает редирект.
Splats
При сопоставлении splat-паттерн, обозначаемый звездочкой (*) жадно соответствует всем символам. В URL можно указать только один splat.
На совпавшее значение можно ссылаться в значении заголовка как на :splat заполнитель.
Заполнители
Плейсхолдер можно определить с помощью :placeholder_name. Двоеточие (:) с последующей буквой обозначает начало плейсхолдера, и имя плейсхолдера после неё должно состоять из буквенно-цифровых символов и символов подчёркивания (:[A-Za-z]\w*). На каждый именованный заполнитель можно ссылаться только один раз. Заполнители соответствуют всем символам, кроме разделителя, которым в составе хоста является точка (.) или косую черту (/) и может быть только косой чертой (/) если она является частью пути.
Аналогично, совпавшее значение можно использовать в значениях заголовков с помощью :placeholder_name.
/movies/:title
x-movie-name: You are watching ":title"Примеры
Cross-Origin Resource Sharing (CORS)
Чтобы разрешить другим доменам получать любые статические ресурсы вашего Worker, можно добавить следующее в _headers файле:
/*
Access-Control-Allow-Origin: *Это применяет Access-Control-Allow-Origin заголовок к любому входящему URL. Обратите внимание, что спецификация CORS допускает только *, null, либо точный источник (origin) в качестве допустимого Access-Control-Allow-Origin значения. Шаблоны с подстановочными знаками внутри origins не поддерживаются. Чтобы разрешить CORS для конкретных URL-адреса предпросмотра, вам нужно будет обрабатывать это динамически в коде Worker, а не через _headers файл.
Запретите показ URL-адресов workers.dev в результатах поиска
Google ↗ и другие поисковые системы часто поддерживают X-Robots-Tag заголовок, чтобы указать своим краулерам, как следует индексировать ваш сайт.
Например, чтобы предотвратить *.*.workers.dev URL от индексации, добавьте следующее в _headers файле:
https://:version.:subdomain.workers.dev/*
X-Robots-Tag: noindexНастройка пользовательского поведения кеша браузера
Если у вас есть папка с fingerprinted assets (assets, в имени файла которых есть хеш), можно настроить более агрессивное кеширование в браузере, чтобы повысить производительность для повторных посетителей:
/static/*
Cache-Control: public, max-age=31556952, immutableУсиление безопасности приложения
Кликджекинг можно предотвратить, указав браузерам не встраивать ваше приложение в другое приложение (например, с помощью <iframe>) с X-Frame-Options ↗ заголовок.
X-Content-Type-Options: nosniff ↗ не позволяет браузерам интерпретировать ответ с типом контента, отличным от указанного в Content-Type заголовок.
Referrer-Policy ↗ позволяет настроить, сколько информации о том, откуда пришел посетитель, передается при переходе с вашей страницы.
Функции браузера можно отключать в разной степени с помощью Permissions-Policy ↗ заголовок (недавно переименованный из Feature-Policy).
Если вам нужен точный контроль над содержимым приложения, Content-Security-Policy ↗ заголовок позволяет настроить ряд параметров безопасности, включая элементы управления, аналогичные X-Frame-Options заголовок.
/app/*
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer
Permissions-Policy: document-domain=()
Content-Security-Policy: script-src 'self'; frame-ancestors 'none';Сноски
-
Из-за технического ограничения, которое мы надеемся устранить в будущем,
CF-Cache-Statusзаголовок не всегда абсолютно точен. Возможны ложные срабатывания и пропуски. Это должно происходить редко. Пока же этот заголовок следует считать возвращающим «вероятностный» результат. ↩