INTEGRITY Документация

Headers

Заголовки по умолчанию

При обслуживании статических ресурсов Workers по умолчанию добавляет к ответу ряд заголовков. Вот они:

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';

Сноски

  1. Из-за технического ограничения, которое мы надеемся устранить в будущем, CF-Cache-Status заголовок не всегда абсолютно точен. Возможны ложные срабатывания и пропуски. Это должно происходить редко. Пока же этот заголовок следует считать возвращающим «вероятностный» результат.