← Cloudflare Workers / workers / configuration
Флаги совместимости
Флаги совместимости включают отдельные функции. Они полезны, если вы хотите помочь команде Workers протестировать готовящиеся изменения, которые пока не включены по умолчанию, или если нужно отложить изменение, от которого зависит ваш код, но при этом применить остальные изменения совместимости.
У флагов совместимости часто есть дата, начиная с которой они включаются по умолчанию, и поэтому, указав compatibility_date для вашего Worker, вы можете быстро включить все эти флаги совместимости вплоть до этой даты включительно.
Настройка compatibility flags
Вы можете указать список compatibility_flags, которые включают или отключают определённые изменения.
Через Wrangler
Флаги совместимости можно задать в конфигурационный файл Wrangler.
В этом примере включается флаг formdata_parser_supports_files, который описан ниже. Начиная с указанной даты, 2021-09-14, этот флаг ещё не был включён по умолчанию, но при указании его в compatibility_flags, мы всё равно можем это включить. compatibility_flags также можно использовать для отключения изменений, которые ранее стали поведением по умолчанию.
{
// Opt into backwards-incompatible changes through September 14, 2021.
"compatibility_date": "2021-09-14",
// Also opt into an upcoming fix to the FormData API.
"compatibility_flags": [
"formdata_parser_supports_files"
]
}compatibility_date = "2021-09-14"
compatibility_flags = [ "formdata_parser_supports_files" ]Через Cloudflare Dashboard
Флаги совместимости можно обновить в настройках Workers на Панель управления Cloudflare ↗.
Через Cloudflare API
Флаги совместимости можно задать при загрузке Worker с помощью Workers Script API или Workers Versions API в теле запроса metadata поле.
Флаг совместимости с Node.js
A растущее подмножество API Node.js доступны напрямую как Runtime API, без необходимости добавлять полифилы в свой код.
Для дат совместимости 2026-08-04 или более поздней версии проекты Workers и Pages включают оба nodejs_compat и nodejs_compat_v2 по умолчанию. Встроенные API среды выполнения и полифиллы доступны без дополнительной настройки. Для этих дат совместимости данные флаги не используются. Существующим проектам не нужно удалять их при обновлении даты совместимости.
Если ваша дата совместимости раньше 2026-08-04, добавьте nodejs_compat флаг совместимости в ваш конфигурационный файл Wrangler чтобы включить:
{
"compatibility_flags": [
"nodejs_compat"
]
}compatibility_flags = [ "nodejs_compat" ]Чтобы отключить Совместимость с Node.js полностью при дате совместимости 2026-08-04 или более поздней версии удалите положительные флаги, если они есть. Затем добавьте оба no_nodejs_compat и no_nodejs_compat_v2. Примеры настройки см. в Флаг совместимости с Node.js.
Для дат совместимости 2026-08-04 или более поздней версии Workers включает оба nodejs_compat и nodejs_compat_v2 по умолчанию. Для этих дат совместимости данные флаги не используются, так как дата совместимости обеспечивает такое же поведение. Wrangler, Miniflare, плагин Cloudflare для Vite и плагин Workers для Vitest игнорируют эти избыточные флаги при запуске среды выполнения. Существующим проектам не нужно удалять их при обновлении даты совместимости. В новых конфигурациях их указывать не следует.
Чтобы полностью отключить совместимость с Node.js для даты совместимости 2026-08-04 или более поздней версии удалите nodejs_compat и nodejs_compat_v2 если он присутствует. Затем добавьте оба следующих флага:
{
"compatibility_flags": [
"no_nodejs_compat",
"no_nodejs_compat_v2"
]
}compatibility_flags = [ "no_nodejs_compat", "no_nodejs_compat_v2" ]Node.js AsyncLocalStorage API особенно полезен для Workers. Чтобы включить только AsyncLocalStorage API используйте nodejs_als флаг совместимости.
{
"compatibility_flags": [
"nodejs_als"
]
}compatibility_flags = [ "nodejs_als" ]История флагов
Новейшие флаги указаны первыми.
Удаление API Node.js 24.x с истёкшим сроком поддержки
| По умолчанию с | 2028-04-30 |
| Флаг для включения | remove_nodejs_compat_eol_v24 |
| Флаг для отключения | add_nodejs_compat_eol_v24 |
Когда remove_nodejs_compat_eol_v24 включен, удаляются API, чей жизненный цикл завершился в Node.js 24.x.
Этот флаг автоматически включается, когда remove_nodejs_compat_eol флаг включён после 2028-04-30.
Удаление API Node.js 22.x с истёкшим сроком поддержки
| По умолчанию с | 2027-04-30 |
| Флаг для включения | remove_nodejs_compat_eol_v22 |
| Флаг для отключения | add_nodejs_compat_eol_v22 |
Когда remove_nodejs_compat_eol_v22 включен, удаляются API, чей жизненный цикл завершился в Node.js 22.x.
Этот флаг автоматически включается, когда remove_nodejs_compat_eol флаг включён после 2027-04-30.
Throw On Not Implements TLS Options
| По умолчанию с | 2026-06-16 |
| Флаг для включения | throw_on_not_implemented_tls_options |
| Флаг для отключения | no_throw_on_not_implemented_tls_options |
Если этот параметр включен, передача неподдерживаемых параметров TLS (например, checkServerIdentity) в tls.connect() или new TLSSocket() выбрасывает ERR_OPTION_NOT_IMPLEMENTED вместо того чтобы молча их игнорировать
Обработка файлов .pth для Python Workers
| По умолчанию с | 2026-05-26 |
| Флаг для включения | python_process_pth_files |
| Флаг для отключения | disable_python_process_pth_files |
Если python_process_pth_files флаг установлен, Python Workers обрабатывают .pth
файлы в python_modules/ каталог при запуске, вызвав
site.addsitedir() ↗
на нём. Это позволяет пакетам расширять sys.path декларативно, например, чтобы добавить
подкаталоги или зарегистрировать хуки импорта. Без этого флага .pth файлы в
python_modules/ игнорируются.
Этот флаг также выносит менеджеры контекста энтропии верхнего уровня, необходимые некоторым пакетам, из среды выполнения в workers-py ↗.
Необходимо использовать workers-py версия 1.1.3 или более поздней версии, когда установлен этот флаг.
Node.js diagnostics_channel hasSubscribers getter
| По умолчанию с | 2026-05-19 |
| Флаг для включения | diagnostics_channel_has_subscribers_getter |
| Флаг для отключения | no_diagnostics_channel_has_subscribers_getter |
Когда diagnostics_channel_has_subscribers_getter включен, Channel.hasSubscribers и TracingChannel.hasSubscribers от node:diagnostics_channel становятся доступными только для чтения свойствами геттера, которые сразу вычисляются в булево значение, что соответствует поведению Node.js.
Ранее, hasSubscribers был зарегистрирован как метод, что требовало от пользователей вызывать ch.hasSubscribers() со скобками. При включенном этом флаге ch.hasSubscribers возвращает boolean без вызова функции, что соответствует документация Node.js ↗.
Для этого флага требуется nodejs_compat быть включённым.
Workflows сохраняют NonRetryableError сообщение
| По умолчанию с | 2026-05-14 |
| Флаг для включения | workflows_preserve_non_retryable_error_message |
| Флаг для отключения | workflows_replace_non_retryable_error_message |
Если этот параметр включен и Workflow шаг выбрасывает NonRetryableError, ошибка message и name свойства сохраняются в выброшенном исключении вместо замены на общую строку завершения.
Ранее выброс NonRetryableError с пользовательским сообщением приведет к тому, что исходное сообщение об ошибке будет потеряно и заменено на "The execution of the Workflow instance was terminated, as a step threw an NonRetryableError and it was not handled":
import { WorkflowEntrypoint, NonRetryableError } from "cloudflare:workers";
export class MyWorkflow extends WorkflowEntrypoint {
async run(event, step) {
await step.do("my-step", async () => {
throw new NonRetryableError("custom error message");
// Without this flag: error.message === "The execution of the Workflow instance was terminated, as a step threw an NonRetryableError and it was not handled"
// With this flag: error.message === "custom error message"
});
}
}С workflows_preserve_non_retryable_error_message флаг включён, исходные сообщение и название ошибки сохраняются, что упрощает отладку и обработку конкретных случаев ошибок в коде вашего Workflow.
Расширенная сериализация ошибок
| По умолчанию с | 2026-04-21 |
| Флаг для включения | enhanced_error_serialization |
| Флаг для отключения | legacy_error_serialization |
Когда enhanced_error_serialization включен, ошибки, сериализованные с помощью structuredClone() или сериализация V8 поддерживают больше типов ошибок и включают собственные свойства объекта ошибки.
Обратите внимание, что при включении этой опции десериализация ошибок по умолчанию не сохраняет исходную трассировку стека.
Ранее только базовые Error типы сериализовались, а собственные свойства, добавленные к объектам ошибок, терялись при сериализации.
Используйте изолированное пространство имён PID для контейнеров
| По умолчанию с | 2026-04-01 |
| Флаг для включения | containers_pid_namespace |
| Флаг для отключения | no_containers_pid_namespace |
Когда containers_pid_namespace задан, контейнеры будут использовать изолированное пространство имён PID. ENTRYPOINT вашего контейнера будет иметь PID 1.
Если этот параметр не задан, контейнер использует общее пространство имён PID с виртуальной машиной (VM), в которой он размещён. ENTRYPOINT вашего контейнера будет не имеет PID 1, и другие процессы, выполняющиеся на виртуальной машине (не входящие в ваш контейнер), будут видны.
Работа с backpressure в TextEncoderStream/TextDecoderStream в соответствии со спецификацией
| По умолчанию с | 2026-03-24 |
| Флаг для включения | encoder_stream_spec_compliant_backpressure |
| Флаг для отключения | no_encoder_stream_spec_compliant_backpressure |
Когда encoder_stream_spec_compliant_backpressure включен, TextEncoderStream и TextDecoderStream используйте high water mark на стороне чтения, равный 0, как указано в WHATWG Encoding Standard ↗.
При high water mark, равном 0, readable-сторона изначально работает с применением backpressure, поэтому записи корректно блокируются, пока reader не выполнит pull. Раньше high water mark по умолчанию был равен 1, что приводило к pull() чтобы сработать при запуске и снять backpressure ещё до первой записи.
Поведение writer в WritableStream, соответствующее спецификации
| По умолчанию с | 2026-03-24 |
| Флаг для включения | writable_stream_spec_compliant_writer |
| Флаг для отключения | no_writable_stream_spec_compliant_writer |
Когда writable_stream_spec_compliant_writer включен, несколько WritableStream устранены проблемы соответствия спецификации, связанные с поведением блокировки и снятия блокировки в writer, чтобы соответствовать WHATWG Streams Standard ↗.
Включить глобальные классы Performance
| По умолчанию с | 2026-03-17 |
| Флаг для включения | enable_global_performance_classes |
| Флаг для отключения | disable_global_performance_classes |
Когда enable_global_performance_classes включен, в глобальной области видимости доступны следующие классы: PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceResourceTiming, PerformanceObserver, а также PerformanceObserverEntryList.
Эти классы также неявно включаются enable_nodejs_perf_hooks_module флаг.
Этот флаг автоматически включается для Workers с датой совместимости 2026-03-17 или более поздней, когда nodejs_compat включён.
Включить node:child_process модуль
| По умолчанию с | 2026-03-17 |
| Флаг для включения | enable_nodejs_child_process_module |
| Флаг для отключения | disable_nodejs_child_process_module |
enable_nodejs_child_process_module флаг включает node:child_process заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-03-17 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:child_process API.
Включить node:perf_hooks модуль
| По умолчанию с | 2026-03-17 |
| Флаг для включения | enable_nodejs_perf_hooks_module |
| Флаг для отключения | disable_nodejs_perf_hooks_module |
enable_nodejs_perf_hooks_module флаг включает node:perf_hooks модуль в Workers. Этот флаг также неявно включает глобальные классы Performance (PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceResourceTiming, PerformanceObserver, а также PerformanceObserverEntryList).
Этот флаг автоматически включается для Workers с датой совместимости 2026-03-17 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:perf_hooks API.
Включить node:readline модуль
| По умолчанию с | 2026-03-17 |
| Флаг для включения | enable_nodejs_readline_module |
| Флаг для отключения | disable_nodejs_readline_module |
enable_nodejs_readline_module флаг включает node:readline заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-03-17 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:readline API.
Включить node:repl модуль
| По умолчанию с | 2026-03-17 |
| Флаг для включения | enable_nodejs_repl_module |
| Флаг для отключения | disable_nodejs_repl_module |
enable_nodejs_repl_module флаг включает node:repl заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-03-17 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:repl API.
Включить node:tty модуль
| По умолчанию с | 2026-03-17 |
| Флаг для включения | enable_nodejs_tty_module |
| Флаг для отключения | disable_nodejs_tty_module |
enable_nodejs_tty_module флаг включает node:tty заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-03-17 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:tty API.
Включить node:v8 модуль
| По умолчанию с | 2026-03-17 |
| Флаг для включения | enable_nodejs_v8_module |
| Флаг для отключения | disable_nodejs_v8_module |
enable_nodejs_v8_module флаг включает node:v8 заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-03-17 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:v8 API.
Включить node:worker_threads модуль
| По умолчанию с | 2026-03-17 |
| Флаг для включения | enable_nodejs_worker_threads_module |
| Флаг для отключения | disable_nodejs_worker_threads_module |
enable_nodejs_worker_threads_module флаг включает node:worker_threads заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-03-17 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:worker_threads API.
Стандартный двоичный тип WebSocket
| По умолчанию с | 2026-03-17 |
| Флаг для включения | websocket_standard_binary_type |
| Флаг для отключения | no_websocket_standard_binary_type |
Этот флаг управляет значением по умолчанию для binaryType свойство у WebSocket, который, в свою очередь, определяет, как двоичные кадры доставляются в message событие. При включённом флаге binaryType по умолчанию равно "blob" и бинарные фреймы поступают в виде Blob ↗ объекты, соответствующие Спецификация WebSocket ↗ и стандартным поведением браузера. Без этого флага binaryType по умолчанию равно "arraybuffer" и бинарные фреймы поступают в виде ArrayBuffer ↗, соответствуя историческому поведению runtime.
binaryType свойство само по себе доступно в каждом WebSocket независимо от флага. Присвоение значения переопределяет значение по умолчанию для конкретного WebSocket:
const resp = await fetch("https://example.com", {
headers: { Upgrade: "websocket" },
});
const ws = resp.webSocket;
// Opt back into ArrayBuffer delivery before calling accept().
ws.binaryType = "arraybuffer";
ws.accept();
ws.addEventListener("message", (event) => {
// event.data is an ArrayBuffer for binary frames.
});Если вы ещё не готовы к переходу и хотите оставить ArrayBuffer по умолчанию для каждого WebSocket в вашем Worker, добавьте no_websocket_standard_binary_type флаг в ваш конфигурационный файл Wrangler.
Этот флаг не влияет на переходящий в спящий режим (hibernatable) WebSocket webSocketMessage обработчик, который всегда получает бинарные данные в виде ArrayBuffer.
Отображение кодов ошибок в операциях Queue
| По умолчанию с | 2026-03-12 |
| Флаг для включения | queue_expose_error_codes |
| Флаг для отключения | no_queue_expose_error_codes |
Когда queue_expose_error_codes включен, Queue операции будут включать подробную информацию об ошибках, в том числе коды ошибок и их причины, что упрощает программную обработку и диагностику ошибок очереди.
Автоматический ответ на закрытие соединения WebSocket
| По умолчанию с | 2026-04-07 |
| Флаг для включения | web_socket_auto_reply_to_close |
| Флаг для отключения | web_socket_manual_reply_to_close |
Когда сервер отправляет WebSocket-фрейм Close, среда выполнения Workers теперь автоматически отправляет ответный фрейм Close и переводит readyState к CLOSED перед вызовом события close событие. Это соответствует Спецификация WebSocket ↗ и поведением браузера.
Ранее получение инициированного сервером кадра Close оставляло WebSocket в состоянии CLOSING и требовалось, чтобы приложение вызывало close() сам по себе. Когда этот флаг активен, вам больше не нужно вызывать close() в вашем close обработчик события. Среда выполнения автоматически обрабатывает процедуру закрытия соединения.
const [client, server] = Object.values(new WebSocketPair());
server.accept();
server.addEventListener("close", (event) => {
// readyState is already CLOSED — no need to call server.close().
console.log(server.readyState); // WebSocket.CLOSED
console.log(event.code); // 1000
console.log(event.wasClean); // true
}, { once: true });Если вы всё же вызываете close() внутри обработчика, вызов молча игнорируется. Это значит, что существующий код, вручную отвечающий на Close фреймы, не сломается при обновлении даты совместимости.
Автоматическое закрытие соединения может мешать проксированию WebSocket. Когда Worker проксирует соединение между клиентом и бэкендом, прежнее поведение позволяло Worker увидеть фрейм Close от бэкенда без разрыва соединения средой выполнения, что давало Worker время скоординировать корректное закрытие на стороне клиента. Чтобы поддержать этот сценарий, accept() метод теперь принимает параметр allowHalfOpen. Вызовите ws.accept({ allowHalfOpen: true }) чтобы восстановить прежнее поведение half-open независимо от флага совместимости.
const [client, server] = Object.values(new WebSocketPair());
// Opt into half-open mode for proxying
server.accept({ allowHalfOpen: true });
server.addEventListener("close", (event) => {
// With allowHalfOpen true, readyState is still CLOSING here,
// giving you time to coordinate the close on the other side.
console.log(server.readyState); // WebSocket.CLOSING
// Manually close when ready.
server.close(1000, "done");
}, { once: true });Обратите внимание, что не существует соответствующего параметра для WebSocket конструктор. WebSocket, созданные с помощью new WebSocket всегда будет автоматически отвечать на закрытие соединения после вступления этого флага в силу. WebSocket, созданные таким образом, автоматически «принимаются», поэтому передать этот параметр в accept(). Если вы создаёте WebSocket с помощью new WebSocket, но вам нужно полуоткрытое поведение, вам придётся перейти на использование fetch() взамен.
// This does not allow half-open:
let ws = new WebSocket("wss://example.com");
// But you can do this instead:
let resp = await fetch("https://example.com", {
headers: { "Upgrade": "websocket" }
});
if (!resp.webSocket) {
throw new Error("WebSocket handshake not accepted");
}
let ws = resp.webSocket;
ws.accept({ allowHalfOpen: true });Дополнительные сведения см. в Документация по WebSocket API.
Специализированная реализация TextDecoder для CJK
| По умолчанию с | 2026-03-03 |
| Флаг для включения | text_decoder_cjk_decoder |
| Флаг для отключения | disable_text_decoder_cjk_decoder |
Когда text_decoder_cjk_decoder включен, выделенный CJK TextDecoder реализация используется для переопределения кодировок CJK и обработки старшего байта Big5 вместо устаревшего пути кода, основанного только на ICU. Это повышает соответствие спецификации при декодировании текста CJK.
Откладывает обработку необработанных отклонений промисов до контрольной точки микрозадач
| По умолчанию с | 2026-03-03 |
| Флаг для включения | unhandled_rejection_after_microtask_checkpoint |
| Флаг для отключения | no_unhandled_rejection_after_microtask_checkpoint |
Когда unhandled_rejection_after_microtask_checkpoint включен, unhandledrejection обработка события откладывается до завершения контрольной точки микрозадач. Это предотвращает ложные срабатывания в многотактовых цепочках промисов, где обработчик отклонения добавляется в более позднюю микрозадачу.
Ранее обработка unhandled rejection могла срабатывать преждевременно, до завершения всех microtasks в текущем checkpoint, что приводило к ложным unhandledrejection события для промисов, которые были фактически обработаны.
Применять ограничение на количество байт в причине закрытия WebSocket
| По умолчанию с | 2026-03-03 |
| Флаг для включения | websocket_close_reason_byte_limit |
| Флаг для отключения | no_websocket_close_reason_byte_limit |
Когда websocket_close_reason_byte_limit включен, WebSocket.close() выбрасывает SyntaxError DOMException если reason строка превышает 123 байта при кодировании в UTF-8, как того требует спецификация WebSocket от WHATWG ↗ и RFC 6455, раздел 5.5 ↗.
Workers ранее разрешал произвольно длинные причины закрытия соединения без проверки.
Durable Object deleteAll() удаляет alarms
| По умолчанию с | 2026-02-24 |
| Флаг для включения | delete_all_deletes_alarm |
| Флаг для отключения | delete_all_preserves_alarm |
С delete_all_deletes_alarm флаг, вызов deleteAll() для хранилища Durable Object удалит любой активный alarm в дополнение ко всем сохранённым данным. Ранее deleteAll() удалял только данные, сохранённые пользователем, а для alarms требовался отдельный deleteAlarm() вызов для удаления. Это изменение применяется как к Durable Objects на основе KV, так и к Durable Objects на основе SQLite.
TextDecoder заменяет одиночные суррогаты
| По умолчанию с | 2026-02-24 |
| Флаг для включения | text_decoder_replace_surrogates |
| Флаг для отключения | disable_text_decoder_replace_surrogates |
Когда text_decoder_replace_surrogates включен, UTF-16le TextDecoder заменит одиночные суррогаты на U+FFFD (символ замены Unicode), как того требует Encoding Standard ↗. Раньше одиночные суррогатные пары передавались без изменений, что приводило к некорректно сформированным строкам.
Поддержка итерируемых объектов в качестве тела Request/Response для fetch
| По умолчанию с | 2026-02-19 |
| Флаг для включения | fetch_iterable_type_support |
| Флаг для отключения | no_fetch_iterable_type_support |
Когда fetch_iterable_type_support включен, синхронные и асинхронные итерируемые объекты можно передавать в качестве тела fetch() Request или Response и будет корректно проходить итерацию.
Ранее синхронные итерируемые объекты, такие как Arrays, принимались, но приводились к строке (например, [1, 2, 3] станет "1,2,3"), а асинхронные итерируемые объекты будут восприниматься как обычные объекты и вообще не будут проходить итерацию. При включении этого флага итерируемые объекты корректно обрабатываются как потоковое содержимое тела запроса.
Обратите внимание, что теперь массивы обрабатываются как итерируемые объекты, а не преобразуются в строку. Это критическое изменение для кода, который полагался на прежнее поведение.
Включите глобальные таймеры, совместимые с Node.js
| По умолчанию с | 2026-02-10 |
| Флаг для включения | enable_nodejs_global_timers |
| Флаг для отключения | no_nodejs_global_timers |
Когда enable_nodejs_global_timers включен, setTimeout, setInterval, clearTimeout, а также clearInterval возвращает совместимые с Node.js Timeout объекты с такими методами, как refresh(), ref(), unref(), а также hasRef(), соответствуя поведению node:timers.
Для этого флага требуется nodejs_compat быть включённым и автоматически включается для Workers с датой совместимости 2026-02-10 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями об API таймеров.
Включить node:dgram модуль
| По умолчанию с | 2026-01-29 |
| Флаг для включения | enable_nodejs_dgram_module |
| Флаг для отключения | disable_nodejs_dgram_module |
enable_nodejs_dgram_module флаг включает node:dgram заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-01-29 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:dgram API.
Включить node:inspector модуль
| По умолчанию с | 2026-01-29 |
| Флаг для включения | enable_nodejs_inspector_module |
| Флаг для отключения | disable_nodejs_inspector_module |
enable_nodejs_inspector_module флаг включает node:inspector заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-01-29 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:inspector API.
Включить node:sqlite модуль
| По умолчанию с | 2026-01-29 |
| Флаг для включения | enable_nodejs_sqlite_module |
| Флаг для отключения | disable_nodejs_sqlite_module |
enable_nodejs_sqlite_module флаг включает node:sqlite заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-01-29 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:sqlite API.
Включить node:_stream_wrap модуль
| По умолчанию с | 2026-01-29 |
| Флаг для включения | enable_nodejs_stream_wrap_module |
| Флаг для отключения | disable_nodejs_stream_wrap_module |
enable_nodejs_stream_wrap_module флаг включает node:_stream_wrap заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2026-01-29 или более поздней, когда nodejs_compat включён.
require() возвращает экспорт по умолчанию
| По умолчанию с | 2026-01-22 |
| Флаг для включения | require_returns_default_export |
| Флаг для отключения | require_returns_namespace |
Когда require_returns_default_export включен, require() вернёт экспорт по умолчанию модуля, если он существует. Если экспорта по умолчанию нет, вместо него возвращается изменяемая копия объекта пространства имён модуля.
Это соответствует поведению, которое Node.js использует для require(esm), где при наличии возвращается экспорт по умолчанию. Этот флаг полезен для фреймворков вроде Next.js, которые рассчитывают на возможность изменять экспортируемые модули.
Ранее, require() всегда возвращал объект пространства имен модуля (объект вида {default: module.exports}).
Дублируйте stubs в параметрах RPC вместо передачи владения
| По умолчанию с | 2026-01-20 |
| Флаг для включения | rpc_params_dup_stubs |
| Флаг для отключения | rpc_params_transfer_stubs |
Изменяет семантику владения RPC-заглушками, встроенными в параметры RPC-вызова, устраняя проблемы совместимости с Cap'n Web ↗.
Если система Workers RPC впервые появился, право собственности на RPC заглушки, встроенные в параметры или возвращаемое значение другого вызова, переходило к получателю. То есть исходная заглушка неявно уничтожалась, а получателю отправлялась её копия.
Это плохо сочетается с другим правилом: в получателе вызова любые стабы, переданные в параметрах вызова, автоматически освобождаются по завершении вызова. Из сочетания этих двух правил следует, что при проксировании вызова, то есть когда реализация RPC просто выполняет еще один RPC вызов с теми же параметрами, стабы в параметрах освобождаются дважды. Хуже того, если конечный получатель стаба хочет сохранить копию после завершения вызова, это может не сработать, поскольку копия стаба на уровне прокси всё равно освобождается, разрывая соединение.
По этой причине чистая JS реализация Cap'n Web стала считать, что стабы в параметрах НЕ передают владение, а просто дублируются. Этот флаг совместимости приводит встроенный RPC в Workers Runtime в соответствие с поведением Cap'n Web.
Один из распространенных случаев, которые это исправляет, это клиенты, подписывающиеся на обратные вызовы от Durable Object через Cap'n Web. В этом случае клиентское приложение передает функцию обратного вызова через WebSocket Cap'n Web на Worker без состояния, который в свою очередь пересылает stub через Workers RPC в Durable Object. Durable Object сохраняет dup() заглушки (stub), чтобы впоследствии вызвать её и уведомить клиента о событиях. К сожалению, до появления этого флага это не работало: как только сама функция subscribe завершала выполнение, заглушка Cap'n Web в stateless worker уничтожалась (поскольку она была параметром вызова, который завершился, и не была dup(), то есть не был повторно продублирован в контексте worker без сохранения состояния). Поэтому когда Durable Object позже попытался вызвать callback подписки, он получил ошибку «Error: RPC stub used after being disposed», хотя перед этим он аккуратно dup(), то есть продублировал заглушку в конце.
Итерируемое тело fetch учитывает переопределения toString/toPrimitive
| По умолчанию с | 2026-01-15 |
| Флаг для включения | fetch_iterable_type_support_override_adjustment |
| Флаг для отключения | no_fetch_iterable_type_support_override_adjustment |
Когда fetch_iterable_type_support_override_adjustment включен, объекты, переданные в качестве тела fetch() Request или Response которые поддерживают синхронную итерацию, но также имеют собственный toString или Symbol.toPrimitive метод не будет обрабатывать их как итерируемые объекты. Вместо этого они будут обрабатываться как объекты, приведённые к строке, что соответствует прежнему поведению для таких объектов.
Этот флаг уточняет поведение, введённое fetch_iterable_type_support флаг и автоматически включается, когда fetch_iterable_type_support включается начиная с 2026-01-15.
Удаление UTF-8 BOM в потоке readAllText()
| По умолчанию с | 2026-01-13 |
| Флаг для включения | strip_bom_in_read_all_text |
| Флаг для отключения | do_not_strip_bom_in_read_all_text |
Когда strip_bom_in_read_all_text включен, readAllText() метод для потоков удаляет начальную метку порядка байтов UTF-8 (BOM), если она присутствует, в соответствии с ожидаемым поведением согласно стандартам веб-платформы.
Ранее BOM включался в возвращаемую строку, что могло приводить к неожиданному поведению при разборе текстового содержимого.
Включить node:cluster модуль
| По умолчанию с | 2025-12-04 |
| Флаг для включения | enable_nodejs_cluster_module |
| Флаг для отключения | disable_nodejs_cluster_module |
enable_nodejs_cluster_module флаг включает node:cluster заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2025-12-04 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:cluster API.
Включить node:domain модуль
| По умолчанию с | 2025-12-04 |
| Флаг для включения | enable_nodejs_domain_module |
| Флаг для отключения | disable_nodejs_domain_module |
enable_nodejs_domain_module флаг включает node:domain заглушка модуля в Workers. Обратите внимание, что node:domain считается устаревшим в самом Node.js.
Этот флаг автоматически включается для Workers с датой совместимости 2025-12-04 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:domain API.
Включить node:punycode модуль
| По умолчанию с | 2025-12-04 |
| Флаг для включения | enable_nodejs_punycode_module |
| Флаг для отключения | disable_nodejs_punycode_module |
enable_nodejs_punycode_module флаг включает node:punycode модуль в Workers. Обратите внимание, что node:punycode считается устаревшим в самом Node.js.
Этот флаг автоматически включается для Workers с датой совместимости 2025-12-04 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:punycode API.
Включить node:trace_events модуль
| По умолчанию с | 2025-12-04 |
| Флаг для включения | enable_nodejs_trace_events_module |
| Флаг для отключения | disable_nodejs_trace_events_module |
enable_nodejs_trace_events_module флаг включает node:trace_events заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2025-12-04 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:trace_events API.
Включить node:wasi модуль
| По умолчанию с | 2025-12-04 |
| Флаг для включения | enable_nodejs_wasi_module |
| Флаг для отключения | disable_nodejs_wasi_module |
enable_nodejs_wasi_module флаг включает node:wasi заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2025-12-04 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:wasi API.
Включить быструю оптимизацию структур JSG
| По умолчанию с | 2025-12-03 |
| Флаг для включения | enable_fast_jsg_struct |
| Флаг для отключения | disable_fast_jsg_struct |
Когда enable_fast_jsg_struct включен, внутренние структурные типы, используемые API среды выполнения Workers, создаются по более эффективной схеме, сокращающей время создания объектов.
Однако необязательные поля будут явно установлены в значение undefined а не полностью опускается из объекта, что является заметным изменением поведения. Код, проверяющий наличие свойства с помощью "key" in obj или Object.hasOwn(obj, "key") может вести себя иначе, поскольку необязательные поля, которых раньше не было, теперь будут присутствовать со значением undefined.
Чтобы проверить значение, используйте предпочтительно obj.key !== undefined через "key" in obj.
Включите ctx.exports
| По умолчанию с | 2025-11-17 |
| Флаг для включения | enable_ctx_exports |
| Флаг для отключения | disable_ctx_exports |
Этот флаг включает ctx.exports API, который содержит автоматически настроенные loopback bindings для экспортов верхнего уровня вашего Worker. Это позволяет не настраивать явные привязки для вашего WorkerEntrypoints и пространства имен Durable Object, определенные в том же Worker.
Автоматическая трассировка
| Флаг для включения | enable_workers_observability_tracing |
Этот флаг включит Workers Tracing по умолчанию, если в конфигурационном файле Wrangler указано следующее:
{
"observability": {
"enabled": true
}
}Также можно явно включить автоматическую трассировку без этого флага и с более старыми датами совместимости, задав следующее:
{
"observability": {
"traces": {
"enabled": true
}
}
}Включить node:vm модуль
| По умолчанию с | 2025-10-01 |
| Флаг для включения | enable_nodejs_vm_module |
| Флаг для отключения | disable_nodejs_vm_module |
enable_nodejs_vm_module флаг включает node:vm заглушка модуля в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2025-10-01 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:vm API.
Включить node:console модуль
| По умолчанию с | 2025-09-21 |
| Флаг для включения | enable_nodejs_console_module |
| Флаг для отключения | disable_nodejs_console_module |
enable_nodejs_console_module флаг включает node:console модуль в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2025-09-21 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:console API.
Включить проверку точки входа workflow
| По умолчанию с | 2025-09-20 |
| Флаг для включения | enable_validate_workflow_entrypoint |
| Флаг для отключения | disable_validate_workflow_entrypoint |
Когда enable_validate_workflow_entrypoint включен, выполняются дополнительные проверки, гарантирующие, что Workflows определены и используются правильно. Это помогает выявлять ошибки конфигурации при загрузке, а не во время выполнения.
Включить node:fs модуль
| По умолчанию с | 2025-09-15 |
| Флаг для включения | enable_nodejs_fs_module |
| Флаг для отключения | disable_nodejs_fs_module |
enable_nodejs_fs_module флаг включает node:fs модуль в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2025-09-15 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:fs API.
Включить node:os модуль
| По умолчанию с | 2025-09-15 |
| Флаг для включения | enable_nodejs_os_module |
| Флаг для отключения | disable_nodejs_os_module |
enable_nodejs_os_module флаг включает node:os модуль в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2025-09-15 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:os API.
Включить process реализация v2
| По умолчанию с | 2025-09-15 |
| Флаг для включения | enable_nodejs_process_v2 |
| Флаг для отключения | disable_nodejs_process_v2 |
Если включено после 2025-09-15, enable_nodejs_process_v2 флаг вместе с nodejs_compat флаг совместимости
обеспечивает полноценно совместимую с Node.js process реализация, пришедшая на смену предыдущей минимальной реализации process,
которая предоставляла только ограниченный nextTick, env, exit, getBuiltinModule, platform и features свойства.
Чтобы продолжить использовать предыдущую минимальную реализацию после даты совместимости, задайте disable_nodejs_process_v2 флаг вместо этого.
Большинство поддерживаемых Node.js свойств process реализованы там, где это возможно, а для неподдерживаемых функций экспортируется undefined. См. документация по process для получения сведений об особенностях реализации в Workers.
Включите модули HTTP-сервера Node.js
| По умолчанию с | 2025-09-01 |
| Флаг для включения | enable_nodejs_http_server_modules |
| Флаг для отключения | disable_nodejs_http_server_modules |
enable_nodejs_http_server_modules флаг включает доступность серверных модулей HTTP
из Node.js, таких как node:_http_server в Workers.
disable_nodejs_http_server_modules флаг отключает доступность этих
серверных модулей.
Это обеспечивает совместимость с библиотеками Node.js и существующим кодом, использующим стандартные API HTTP-сервера Node.js. Доступный функционал включает:
http.createServer()для создания HTTP-серверовhttp.Serverкласс для экземпляров сервераhttp.ServerResponseдля обработки ответов сервера
Этот флаг необходимо использовать вместе с enable_nodejs_http_modules флаг
для включения всех возможностей node:http.
Этот флаг автоматически включается для Workers с
датой совместимости 2025-09-01 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями об API Node.js HTTP.
Включить node:http2 модуль
| По умолчанию с | 2025-09-01 |
| Флаг для включения | enable_nodejs_http2_module |
| Флаг для отключения | disable_nodejs_http2_module |
enable_nodejs_http2_module флаг включает node:http2 заглушки модулей в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2025-09-01 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:http2 API.
Удаление API Node.js с истёкшим сроком поддержки
| По умолчанию с | 2025-09-01 |
| Флаг для включения | remove_nodejs_compat_eol |
| Флаг для отключения | add_nodejs_compat_eol |
Когда remove_nodejs_compat_eol включен, API, для которых в Node.js завершился жизненный цикл, удаляются для Workers. Если параметр отключен, эти API присутствуют, но могут оставаться нерабочими заглушками.
Этот флаг является сводным (roll-up). По мере того как отдельные API достигают конца поддержки (EOL) в конкретных версиях Node.js, добавляются новые флаги совместимости для этих версий (например, remove_nodejs_compat_eol_v22, remove_nodejs_compat_eol_v23, а также remove_nodejs_compat_eol_v24) которые этот флаг подразумевает начиная с соответствующих дат.
Этот флаг автоматически включается для Workers с датой совместимости 2025-09-01 или более поздней, когда nodejs_compat включён.
Удаление API Node.js 23.x с истёкшим сроком поддержки
| По умолчанию с | 2025-09-01 |
| Флаг для включения | remove_nodejs_compat_eol_v23 |
| Флаг для отключения | add_nodejs_compat_eol_v23 |
Когда remove_nodejs_compat_eol_v23 включен, удаляются API, чей жизненный цикл завершился в Node.js 23.x (EOL в июне 2025 года).
Этот флаг автоматически включается, когда remove_nodejs_compat_eol_v24 флаг включён после 2025-09-01.
Удаление заголовка Authorization при кросс-доменных перенаправлениях
| По умолчанию с | 2025-09-01 |
| Флаг для включения | strip_authorization_on_cross_origin_redirect |
| Флаг для отключения | retain_authorization_on_cross_origin_redirect |
Когда strip_authorization_on_cross_origin_redirect включен, Authorization заголовок автоматически удаляется при переходе по перенаправлению на другой источник. Такое поведение требуется текущей Спецификация Fetch API ↗.
Это требование добавили в спецификацию Fetch в 2022 году, уже после того, как Cloudflare Workers реализовали обработку fetch. Изначально Workers не соответствовали этому требованию, поэтому новое поведение включается через флаг совместимости.
Прежнее поведение не было по своей сути небезопасным и в некоторых случаях могло оказаться желательным. Например, если API, требующий авторизации, хочет перенаправить запрос на новый хост, сохранив при этом учётные данные клиента. При новом поведении такое перенаправление больше не включает учётные данные автоматически. Однако прежнее поведение могло приводить к непреднамеренной утечке учётных данных при перенаправлении на ненадёжные источники.
Чтобы сохранить прежнее поведение, задайте retain_authorization_on_cross_origin_redirect флаг.
Включите доступность node:http и node:https модули
| По умолчанию с | 2025-08-15 |
| Флаг для включения | enable_nodejs_http_modules |
| Флаг для отключения | disable_nodejs_http_modules |
enable_nodejs_http_modules флаг включает доступность Node.js
node:http и node:https модули в Workers (только клиентские API).
disable_nodejs_http_modules флаг отключает доступность этих
модулей.
Это обеспечивает совместимость с библиотеками Node.js и существующим кодом, использующим стандартные API node:http и node:https для выполнения HTTP-запросов. Доступный функционал включает:
http.request()иhttps.request()для выполнения HTTP/HTTPS-запросовhttp.get()иhttps.get()для выполнения GET-запросов- Объекты запроса и ответа со стандартными API Node.js
- Поддержка стандартных методов HTTP, заголовков и опций
См. документация Node.js ↗ дополнительные сведения об API Node.js.
Предоставление глобальных MessageChannel и MessagePort
| По умолчанию с | 2025-08-15 |
| Флаг для включения | expose_global_message_channel |
| Флаг для отключения | no_expose_global_message_channel |
Если expose_global_message_channel флаг установлен, Workers предоставят доступ
к MessageChannel и MessagePort конструкторы глобально.
Если no_expose_global_message_channel флаг установлен, Workers не будут
предоставлять их.
Отключить глобальные обработчики для Python Workers
| По умолчанию с | 2025-08-14 |
| Флаг для включения | python_no_global_handlers |
| Флаг для отключения | disable_python_no_global_handlers |
Если python_no_global_handlers флаг установлен, Python Workers отключают
глобальные обработчики и требуют их использования через классы точек входа по умолчанию.
Включить cache: no-cache стандартный HTTP API
| По умолчанию с | 2025-08-07 |
| Флаг для включения | cache_no_cache_enabled |
| Флаг для отключения | cache_no_cache_disabled |
Когда вы включаете cache_no_cache_enabled флаг совместимости, можно указать no-cache
значение для cache свойство интерфейса Request. Если этот флаг совместимости не
включен или cache_option_disabled задан, среда выполнения Workers выбросит TypeError с сообщением
Unsupported cache mode: no-cache.
Когда этот флаг включён, вы можете указать Cloudflare принудительно проверять актуальность
ответа на подзапрос, который Worker отправляет, с помощью fetch()
API:
Когда no-cache указан:
-
Все запросы содержат заголовки
Pragma: no-cacheиCache-Control: no-cacheзаданы для них. -
Подзапросы к источникам, не размещённым в Cloudflare, заставляют кеш Cloudflare выполнять повторную проверку с источником.
Ревалидация с источником означает, что запрос Worker сначала будет искать совпадение в кэше Cloudflare, а затем:
- Если совпадение найдено, на origin-сервер отправляется условный запрос, независимо от того, является ли совпадение актуальным или устаревшим. Если ресурс не изменился, возвращается кешированная версия. Если ресурс изменился, он загружается с origin-сервера, обновляется в кеше и возвращается.
- Если совпадение не найдено, Workers выполнит обычный запрос к источнику и закеширует ответ.
Примеры использования cache: 'no-cache':
const response = await fetch("https://example.com", { cache: "no-cache" });Значение кэша также можно задать на Request объект.
const request = new Request("https://example.com", { cache: "no-cache" });
const response = await fetch(request);Задайте this значение обработчиков событий EventTarget
| По умолчанию с | 2025-08-01 |
| Флаг для включения | set_event_target_this |
| Флаг для отключения | no_set_event_target_this |
Если set_event_target_this флаг установлен, Workers установят this значение
обработчиков событий в EventTarget экземпляр, на котором
происходит событие. Это соответствует спецификации.
Когда затем no_set_event_target_this флаг установлен, Workers не будут устанавливать
this значение обработчиков событий, и оно будет undefined взамен.
Настройка полных заголовков переадресуемых писем
| По умолчанию с | 2025-08-01 |
| Флаг для включения | set_forwardable_email_full_headers |
| Флаг для отключения | set_forwardable_email_single_headers |
Исходная версия заголовков, отправляемых в edgeworker, обрезалась до
одного значения для определённых имён заголовков, таких как To и Cc. С
set_forwardable_email_full_headers флаг, Workers будут получать полные
значения заголовков в скрипте worker.
Строгое соответствие Web Platform Tests (WPT)
| Флаг для включения | pedantic_wpt |
| Флаг для отключения | non_pedantic_wpt |
pedantic_wpt флаг включает строгое соответствие Web Platform Tests (WPT)
в Workers. Изначально это затрагивает только Event и EventTarget API, но
в будущем будет расширен на другие API. Для этого флага не задана дата включения
по умолчанию.
Привязка снимков AsyncLocalStorage к запросу
| По умолчанию с | 2025-06-16 |
| Флаг для включения | bind_asynclocalstorage_snapshot_to_request |
| Флаг для отключения | do_not_bind_asynclocalstorage_snapshot_to |
Фрейм AsyncLocalStorage может захватывать значения, привязанные к текущему контексту запроса. Это не всегда находится под контролем пользователя, поскольку мы используем фрейм хранилища ALS для распространения внутренних участков трассировки, а также значений, заданных пользователем. Когда bind_asynclocalstorage_snapshot_to_request
флаг установлен, среда выполнения привязывает снимок (snapshot) и связанные функции к текущему
контексту запроса и выбросит ошибку, если связанные функции будут вызваны
вне запроса, в котором они были созданы.
do_not_bind_asynclocalstorage_snapshot_to флаг отключает это поведение.
Выдавать ошибку при обнаружении нераспознанных import assertions
| По умолчанию с | 2025-06-16 |
| Флаг для включения | throw_on_unrecognized_import_assertion |
| Флаг для отключения | ignore_unrecognized_import_assertion |
throw_on_unrecognized_import_assertion флаг определяет, как Workers обрабатывают
атрибуты импорта, которые не распознаются средой выполнения. Раньше Workers
игнорировали все атрибуты импорта, что не соответствует
спецификации. Ожидается, что среда выполнения выбрасывает ошибку при обнаружении
атрибута импорта, который не распознан.
Если ignore_unrecognized_import_assertion флаг установлен, Workers будут
игнорировать нераспознанные атрибуты импорта.
Включить eval при запуске
| По умолчанию с | 2025-06-01 |
| Флаг для включения | allow_eval_during_startup |
| Флаг для отключения | disallow_eval_during_startup |
Если allow_eval_during_startup флаг установлен, Workers могут использовать eval()
и new Function(text) на этапе запуска скрипта Worker. Это
позволяет выполнять динамический код в начале жизненного цикла Worker.
Если disallow_eval_during_startup флаг установлен, использование eval() или
new Function(text) на этапе запуска вызовет ошибку.
Включить Request.signal для входящих запросов
| Флаг для включения | enable_request_signal |
| Флаг для отключения | disable_request_signal |
Когда вы используете enable_request_signal флаг совместимости, можно подключить обработчик события к Request объекты, используя signal свойство ↗. Это позволяет выполнять действия в момент, когда клиент отменяет запрос к вашему Worker.
Запрос Cache API cf переопределяет правила кеширования
| По умолчанию с | 2025-05-19 |
| Флаг для включения | cache_api_request_cf_overrides_cache_rules |
| Флаг для отключения | no_cache_api_request_cf_overrides_cache_rules |
Когда cache_api_request_cf_overrides_cache_rules включен, настройки кеша, указанные в cf объект запроса, переданного в Cache API переопределяет правила кеширования. Это относится только к сайтам, принадлежащим пользователю, или сайтам с серым облаком (grey-clouded).
Это аналог Cache API для request_cf_overrides_cache_rules флаг, который применяется к fetch() API.
Включить navigator.language
| По умолчанию с | 2025-05-19 |
| Флаг для включения | enable_navigator_language |
| Флаг для отключения | disable_navigator_language |
Если enable_navigator_language флаг установлен, navigator.language свойство
будет доступно в Workers. Пока же значение navigator.language всегда
будет en.
Если disable_navigator_language флаг установлен, navigator.language свойство
будет недоступно.
Запрет на импортируемое окружение
| Флаг для включения | disallow_importable_env |
| Флаг для отключения | allow_importable_env |
Если disallow_importable_env флаг включён, Workers не позволят импортировать
переменные окружения через cloudflare:workers модуль и не будет заполнять
переменные окружения в глобальном process.env объект, когда включена совместимость
с Node.js.
У этого флага нет даты включения по умолчанию.
Включить FinalizationRegistry и WeakRef
| По умолчанию с | 2025-05-05 |
| Флаг для включения | enable_weak_ref |
| Флаг для отключения | disable_weak_ref |
Включает использование FinalizationRegistry ↗ и WeakRef ↗ встроенных модулей.
FinalizationRegistryпозволяет зарегистрировать callback для очистки, который выполняется после сборки объекта мусорщиком.WeakRefсоздаёт слабую ссылку на объект, позволяя сборщику мусора удалить его, если не осталось других сильных ссылок.
:::note[Behaviour]
FinalizationRegistry callback функции очистки могут выполняться в любой момент жизненного цикла запроса, даже после завершения вызванного обработчика (аналогично ctx.waitUntil()). У этих обратных вызовов нет связанного асинхронного контекста. Внутри них нельзя выполнять операции ввода-вывода, включая отправку событий в tail Worker.
:::
:::caution
Эти API принципиально недетерминированы. Время и порядок выполнения сборки мусора непредсказуемы, и вы не следует полагаться на них в критически важной логике программы. Кроме того, коллбэки очистки, зарегистрированные через FinalizationRegistry может никогда не выполняется, включая, помимо прочего, случаи, когда сборка мусора не запускается или ваш Worker вытесняется.
:::
Передача AbortSignal входящего запроса в подзапросы
| Флаг для включения | request_signal_passthrough |
| Флаг для отключения | no_request_signal_passthrough |
Если request_signal_passthrough флаг, AbortSignal входящего
запроса будет передан подзапросам, когда запрос перенаправляется
в подзапрос с помощью fetch() API.
Слово «the» no_request_signal_passthrough флаг установлен, AbortSignal входящего
запроса не будет передан.
Реализация URLPattern, соответствующая спецификации
| По умолчанию с | 2025-05-01 |
| Флаг для включения | urlpattern_standard |
| Флаг для отключения | urlpattern_original |
Исходный URLPattern реализация не полностью соответствовала WHATWG URLPattern Standard ↗, что приводило к ряду проблем, о которых сообщали пользователи.
С urlpattern_standard включено, Workers использует реализацию URLPattern, соответствующую спецификации. Это критическое изменение по сравнению с исходным поведением, поэтому оно скрыто за флагом совместимости.
Если вы используете URLPattern и после обновления даты совместимости заметили неожиданные изменения в поведении, можно задать urlpattern_original чтобы вернуться к предыдущей реализации.
Для запросов навигации приоритет отдаётся отдаче ассетов
| По умолчанию с | 2025-04-01 |
| Флаг для включения | assets_navigation_prefers_asset_serving |
| Флаг для отключения | assets_navigation_has_no_effect |
Для Workers с статические ресурсы и при включённом этом флаге совместимости запросы навигации (запросы, у которых есть Sec-Fetch-Mode: navigate заголовок) будет предпочтительно обслуживаться нашей логикой отдачи ассетов, даже если точное совпадение ассета не найдено. Это особенно полезно для приложений, которые работают в Режим одностраничного приложения (SPA) или иметь пользовательские страницы 404, поскольку теперь это означает, что резервные страницы 200 /index.html и 404 /404.html будет отдан до вызова скрипта Worker и поэтому не повлечёт списания средств.
Без этого флага среда выполнения по-прежнему будет использовать старое поведение: вызывать скрипт Worker (если он есть) для любых запросов, которые точно не совпадают со статическим ресурсом.
Когда assets.run_worker_first = true задан, этот флаг совместимости не оказывает никакого действия. assets.run_worker_first = true настройка гарантирует, что скрипт Worker выполняется раньше любой логики раздачи ресурсов.
Включите автозаполнение process.env
| По умолчанию с | 2025-04-01 |
| Флаг для включения | nodejs_compat_populate_process_env |
| Флаг для отключения | nodejs_compat_do_not_populate_process_env |
Когда вы включаете nodejs_compat_populate_process_env флаг совместимости и nodejs_compat
флаг также включён, process.env будет заполнен значениями из любых привязок с текстовыми или JSON значениями.
Это означает, что если вы добавили переменные окружения,
секреты, или метаданные версии
привязок, эти значения доступны через process.env.
const apiClient = ApiClient.new({ apiKey: process.env.API_KEY });
const LOG_LEVEL = process.env.LOG_LEVEL || "info";Это упрощает доступ к этим значениям и соответствует распространенным шаблонам Node.js, что может снизить трудозатраты и повысить совместимость с существующими библиотеками Node.js.
Если пользователи не хотят, чтобы эти значения были доступны через process.env, они могут использовать
nodejs_compat_do_not_populate_process_env флаг. В этом случае process.env всё ещё будет
доступен, но значения не будут добавляться автоматически.
Если disallow_importable_env флаг совместимости установлен, process.env также
не будет заполнен.
Потребители Queue не ожидают ctx.waitUntil() до разрешения
| Флаг для включения | queue_consumer_no_wait_for_wait_until |
По умолчанию Queues Consumer Workers подтверждают получение сообщений только после того, как промисы, переданные в ctx.waitUntil() были выполнены. Из-за этого потребители очереди, использующие ctx.waitUntil() для медленной обработки сообщений. Поведение по умолчанию описано в разделе Руководство по настройке потребителя Queues.
Этот Consumer Worker показывает пример Worker, который использует ctx.waitUntil(). При поведении по умолчанию этот Worker-потребитель подтверждает пакет сообщений только после завершения функции sleep.
export default {
async fetch(request, env, ctx) {
// omitted
},
async queue(batch, env, ctx) {
console.log(`received batch of ${batch.messages.length} messages to queue ${batch.queue}`);
for (let i = 0; i < batch.messages.length; ++i) {
console.log(`message #${i}: ${JSON.stringify(batch.messages[i])}`);
}
ctx.waitUntil(sleep(30 * 1000));
}
};
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}Если queue_consumer_no_wait_for_wait_until флаг включён, потребители Queues больше не будут ожидать промисы, переданные в ctx.waitUntil() до разрешения, прежде чем подтверждать сообщения. Это может повысить производительность потребителей очереди, использующих ctx.waitUntil(). При включённом флаге в примере выше Worker-потребитель подтвердит пакет, не дожидаясь завершения функции sleep.
Использование этого флага не повлияет на поведение ctx.waitUntil(). ctx.waitUntil() продолжит продлевать время жизни вашего Worker-потребителя, чтобы он продолжал работать даже после подтверждения пакета сообщений.
Применить исправление обратного давления для TransformStream
| По умолчанию с | 2024-12-16 |
| Флаг для включения | fixup-transform-stream-backpressure |
| Флаг для отключения | original-transform-stream-backpressure |
Исходная реализация TransformStream содержала ошибку, из-за которой сигнализация backpressure переставала работать
после первой записи в transform.
К сожалению, это исправление может привести к сбою существующего кода, написанного для устранения этой ошибки,
что и приведёт к сбою. Поэтому fixup-transform-stream-backpressure флаг совместимости
добавлен, чтобы включить это исправление.
Исправление включено по умолчанию для дат совместимости 2024-12-16 и позднее.
Чтобы восстановить исходную логику backpressure, отключите исправление с помощью
original-transform-stream-backpressure флаг.
Отключить top-level await в require(...)
| По умолчанию с | 2024-12-02 |
| Флаг для включения | disable_top_level_await_in_require |
| Флаг для отключения | enable_top_level_await_in_require |
Workers реализует возможность использовать Node.js-подобный require(...) метод
для импорта модулей в бандл Worker. Исторически этот механизм позволял
импортируемым модулям использовать top-level await. Однако это не совместимо
с Node.js.
disable_top_level_await_in_require флаг совместимости приведёт к тому, что require()
завершаться ошибкой, если модуль использует await верхнего уровня. Этот флаг включён по умолчанию
при дате совместимости 2024-12-02 или более поздней.
Чтобы восстановить исходное поведение, разрешающее await верхнего уровня, используйте
enable_top_level_await_in_require флаг совместимости.
Включить cache: no-store стандартный HTTP API
| По умолчанию с | 2024-11-11 |
| Флаг для включения | cache_option_enabled |
| Флаг для отключения | cache_option_disabled |
Когда вы включаете cache_option_enabled флаг совместимости, можно указать значение для cache свойство интерфейса Request.
Если этот флаг совместимости не включен или cache_option_disabled задан, среда выполнения Workers выбросит Error с сообщением The 'cache' field on 'RequestInitializerDict' is not implemented.
Когда этот флаг включён, вы можете указать Cloudflare не кэшировать ответ на подзапрос, который Worker отправляет, с помощью fetch() API:
Единственная опция кеша, включённая с cache_option_enabled это 'no-store'.
Указание любого другого значения приведёт к тому, что Workers runtime выбросит TypeError с сообщением Unsupported cache mode: <the-mode-you-specified>.
Когда no-store указан:
-
Все запросы содержат заголовки
Pragma: no-cacheиCache-Control: no-cacheзаданы для них. -
Подзапросы к источникам, не размещённым в Cloudflare, обходят кеш Cloudflare.
Примеры использования cache: 'no-store':
const response = await fetch("https://example.com", { cache: "no-store" });Значение кэша также можно задать на Request объект.
const request = new Request("https://example.com", { cache: "no-store" });
const response = await fetch(request);Глобальный fetch() строго общедоступен
| Флаг для включения | global_fetch_strictly_public |
| Флаг для отключения | global_fetch_private_origin |
Если global_fetch_strictly_public флаг совместимости включён, глобальный fetch() функция будет строго маршрутизировать запросы так, как если бы они были сделаны из публичного интернета.
Это означает, что запросы к собственной зоне Worker вернутся к «парадному входу» Cloudflare и будут обработаны как запрос из интернета, возможно, даже снова попав в тот же Worker.
Если global_fetch_strictly_public не включен, такие запросы направляются на исходный сервер зоны, минуя любые Workers, привязанные к этому URL, а также настройки безопасности Cloudflare.
Корректная обработка разрешения Promise между запросами
| По умолчанию с | 2024-10-14 |
| Флаг для включения | handle_cross_request_promise_resolution |
| Флаг для отключения | no_handle_cross_request_promise_resolution |
Раньше промис можно было разрешить из неверного контекста запроса, из-за чего продолжения промиса могли планироваться в неправильном контексте, что приводило к ошибкам и трудно диагностируемым дефектам.
С handle_cross_request_promise_resolution включено, продолжения промисов планируются на выполнение в правильном контексте запроса, если он ещё активен, либо отбрасываются с предупреждением, если правильный контекст уже завершился.
HTTP-методы в верхнем регистре
| По умолчанию с | 2024-10-14 |
| Флаг для включения | upper_case_all_http_methods |
| Флаг для отключения | no_upper_case_all_http_methods |
Методы HTTP должны указываться в верхнем регистре. Согласно спецификации fetch, если
метод указан как get, post, put, delete, head, или options,
ожидается, что реализации приведут метод к верхнему регистру. Все остальные имена методов
обычно должны вызывать ошибку как нераспознанные (например, patch будет
ошибкой при PATCH допускается). Это несколько ограничивает возможности, даже если так предусмотрено спецификацией.
Этот флаг изменяет поведение так, что все методы приводятся к верхнему регистру
перед разбором, поэтому метод всегда распознаётся, если он является известным
методом.
Чтобы восстановить стандартное поведение, используйте no_upper_case_all_http_methods
флаг совместимости.
Автоматически устанавливать Symbol.toStringTag для объектов Workers API
| По умолчанию с | 2024-09-26 |
| Флаг для включения | set_tostring_tag |
| Флаг для отключения | do_not_set_tostring_tag |
Было внесено изменение для установки Symbol.toStringTag во всех объектах Workers API,
чтобы исправить несколько ошибок соответствия спецификации. К сожалению,
это изменение оказалось более критичным, чем ожидалось. Объект do_not_set_tostring_tag флаг совместимости
восстанавливает исходное поведение при датах совместимости 2024-09-26 или более ранних.
Включить node:zlib модуль
| По умолчанию с | 2024-09-23 |
| Флаг для включения | nodejs_zlib |
| Флаг для отключения | no_nodejs_zlib |
nodejs_zlib флаг включает node:zlib модуль в Workers.
Этот флаг автоматически включается для Workers с датой совместимости 2024-09-23 или более поздней, когда nodejs_compat включён.
См. документация Node.js ↗ с подробностями о node:zlib API.
Позволяет указывать нестандартный порт при выполнении подзапроса через API fetch()
| По умолчанию с | 2024-09-02 |
| Флаг для включения | allow_custom_ports |
| Флаг для отключения | ignore_custom_ports |
Когда этот флаг включён и при выполнении подзапроса вы указываете порт с помощью fetch() API, будет использован указанный вами номер порта.
Если вы выполняете подзапрос к сайту, который использует Cloudflare («Orange Clouded»), допускается только порты, поддерживаемые обратным прокси Cloudflare можно указать. При попытке указать неподдерживаемый порт он будет проигнорирован.
Если вы выполняете подзапрос к сайту, который не использует Cloudflare («Grey Clouded»), можно указать любой порт.
Например:
const response = await fetch("https://example.com:8000");С allow_custom_ports приведенный выше пример выполнит fetch https://example.com:8000 вместо
https://example.com:443.
Обратите внимание, что создание клиента WebSocket с помощью вызова new WebSocket(url) также будет учитывать этот флаг.
WritableStream.abort() очищает очередь незавершённых операций записи
| По умолчанию с | 2024-09-02 |
| Флаг для включения | internal_writable_stream_abort_clears_queue |
| Флаг для отключения | internal_writable_stream_abort_does_not_clear_queue |
При использовании исходной реализации WritableStream (потоков «internal»), abort() операция раньше обрабатывалась лениво, то есть очередь ожидающих записей не очищалась до следующей обработки очереди. Из-за этого поток мог зависнуть, если потребитель прекращал чтение.
С internal_writable_stream_abort_clears_queue включено, очередь очищается сразу после abort(), предотвращая зависания в случаях, когда потребитель прекратил обработку записей.
Правильное извлечение MIME-типа blob из content-type заголовки
| По умолчанию с | 2024-06-03 |
| Флаг для включения | blob_standard_mime_type |
| Флаг для отключения | blob_legacy_mime_type |
При вызове response.blob.type(), тип MIME теперь будет корректно извлекаться из content-type заголовки, согласно спецификация WHATWG ↗.
Используйте стандартный разбор URL в fetch()
| По умолчанию с | 2024-06-03 |
| Флаг для включения | fetch_standard_url |
| Флаг для отключения | fetch_legacy_url |
fetch_standard_url флаг делает fetch() используйте WHATWG URL Standard ↗ правила разбора. Исходная реализация выбрасывала исключение TypeError: Fetch API cannot load ошибки для некоторых URL-адресов, для которых стандартный парсинг их не выдаёт, например при наличии пробелов перед URL. Теперь ошибки URL будут выбрасываться сразу же при вызове new Request() с неверным URL. Ранее ошибки URL выбрасывались только один раз fetch() был вызван.
Возврат пустого Uint8Array при последнем чтении BYOB
| По умолчанию с | 2024-05-13 |
| Флаг для включения | internal_stream_byob_return_view |
| Флаг для отключения | internal_stream_byob_return_undefined |
В исходной реализации BYOB («Bring your own buffer») ReadableStreams, read() метод вернул бы undefined когда поток был закрыт и данных для чтения больше не оставалось. Такое поведение не соответствовало стандарту ReadableStream поведение, которое возвращает пустой Uint8Array при закрытии потока.
Если internal_stream_byob_return_view флаг используется, BYOB read() реализует стандартное поведение.
const resp = await fetch('https://example.org');
const reader = resp.body.getReader({ mode: 'byob' });
await result = await reader.read(new Uint8Array(10));
if (result.done) {
// The result gives us an empty Uint8Array...
console.log(result.value.byteLength); // 0
// However, it is backed by the same underlying memory that was passed
// into the read call.
console.log(result.value.buffer.byteLength); // 10
}Поддержка Brotli для Content-Encoding
| По умолчанию с | 2024-04-29 |
| Флаг для включения | brotli_content_encoding |
| Флаг для отключения | no_brotli_content_encoding |
Если brotli_content_encoding флаг совместимости включён, Workers поддерживает br кодировку содержимого и может отправлять запросы и получать ответы с данными, закодированными с помощью Brotli ↗ алгоритм сжатия. Это уменьшает объём данных, которые нужно получить, а также позволяет передавать клиенту исходные сжатые данные без изменений. См. Fetch API документация для получения подробностей.
Durable Object stubs и Service Bindings поддерживают RPC
| По умолчанию с | 2024-04-03 |
| Флаг для включения | rpc |
| Флаг для отключения | no_rpc |
При включенном флаге Durable Object заглушки и Service Bindings поддерживают RPC. Это означает, что такие объекты теперь выглядят так, будто в них определены все возможные имена методов. Вызов любого имени метода отправляет RPC удалённому Durable Object или сервису Worker.
Для большинства приложений это изменение не повлияет на работу, если вы его не используете. Однако некоторый существующий код может пострадать, если он явно проверяет наличие имён методов, ранее не определённых в этих типах. Например, встречался код, который перебирает привязки и пытается автоматически определить их типы по тому, какие методы они реализуют. Теперь такой код будет считать, что service bindings реализуют любой метод, поэтому может ошибочно принимать service bindings за другой тип. В известных нам случаях это не приводило к реальным сбоям, но из осторожности мы скрываем это изменение за флагом.
Обработка пользовательских thenable-объектов
| По умолчанию с | 2024-04-01 |
| Флаг для включения | unwrap_custom_thenables |
| Флаг для отключения | no_unwrap_custom_thenables |
С unwrap_custom_thenables флаг, различные API Workers, принимающие промисы, также будут
корректно обрабатывать пользовательские thenable-объекты (объекты с then метод), которые не являются нативными promise, но
должны обрабатываться как таковые). Например, waitUntil метод объекта ExecutionContext
объект корректно обрабатывает пользовательские thenable-объекты, позволяя использовать их вместо нативных promise.
async fetch(req, env, ctx) {
ctx.waitUntil({ then(res) {
// Resolve the thenable after 1 second
setTimeout(res, 1000);
} });
// ...
}У объектов Fetcher больше нет вспомогательных методов get/put/delete
| По умолчанию с | 2024-03-26 |
| Флаг для включения | fetcher_no_get_put_delete |
| Флаг для отключения | fetcher_has_get_put_delete |
Durable Object заглушки и Service Bindings оба реализуют fetch() метод, который ведёт себя аналогично глобальному fetch() метод, но запросы отправляются на назначение, представленное объектом, а не маршрутизируются на основе URL.
Исторически объекты API, имевшие такой fetch() метод также имел методы get(), put(), а также delete(). Эти методы были тонкими обёртками вокруг fetch() который выполнит соответствующий HTTP метод и автоматически обработает запись/чтение тела запроса и ответа при необходимости.
Эти методы появились как ранняя идея много лет назад, но так и не были документированы, поэтому использовались редко (если вообще использовались). Включение fetcher_no_get_put_delete, либо установив дату совместимости не ранее 2024-03-26 отключает эти методы для вашего Worker.
Это изменение открывает возможность в будущем определять собственные методы с такими именами. Без этого изменения вы не смогли бы определить собственный get, put, а также delete методы, поскольку они будут конфликтовать с этими встроенными вспомогательными методами.
Queues отправляет сообщения в JSON формат
| По умолчанию с | 2024-03-18 |
| Флаг для включения | queues_json_messages |
| Флаг для отключения | no_queues_json_messages |
С queues_json_messages флаг, привязки Queue будут сериализовать значения, переданные в send() или sendBatch() в формат JSON по умолчанию (если не указан конкретный contentType указан).
Подавить глобальный importScripts()
| По умолчанию с | 2024-03-04 |
| Флаг для включения | no_global_importscripts |
| Флаг для отключения | global_importscripts |
Подавляет глобальный importScripts() функция. Этот метод был включён в глобальную область видимости Workers, но явно помечен как нереализованный. Однако наличие этой функции могло вызывать проблемы у некоторых библиотек. Этот флаг совместимости удаляет функцию из глобальной области видимости.
Node.js AsyncLocalStorage
| Флаг для включения | nodejs_als |
| Флаг для отключения | no_nodejs_als |
Включает доступность Node.js AsyncLocalStorage ↗ API в Workers.
Python Workers
| Флаг для включения | python_workers |
Этот флаг включает полноценную поддержку Python. Python Workers реализуют большую часть модуля Python стандартная библиотека, поддерживают все привязки, переменная окружения, а также секреты, и интеграцию с объектами и функциями JavaScript через интерфейс внешних функций.
Сохранение поля publicExponent в WebCrypto
| По умолчанию с | 2023-12-01 |
| Флаг для включения | crypto_preserve_public_exponent |
| Флаг для отключения | no_crypto_preserve_public_exponent |
В WebCrypto API publicExponent поле алгоритма ключей RSA раньше было ArrayBuffer. Используя этот флаг, publicExponent это Uint8Array как того требует спецификация.
Vectorize запрос с необязательно возвращаемыми метаданными
| По умолчанию с | 2023-11-08 |
| Флаг для включения | vectorize_query_metadata_optional |
| Флаг для отключения | vectorize_query_original |
Заданное значение в vectorize_query_metadata_optional означает, что операция запроса Vectorize должна принимать более новые аргументы с returnValues и returnMetadata заданный отдельно вместо устаревшего аргумента returnVectors. Это также меняет формат возвращаемого значения. Если для возврата были указаны значения векторов, возвращаемое значение теперь представляет собой развёрнутый объект вектора с score прикреплён там, где раньше содержался вложенный векторный объект.
Сжатие WebSocket
| По умолчанию с | 2023-08-15 |
| Флаг для включения | web_socket_compression |
| Флаг для отключения | no_web_socket_compression |
Среда выполнения Workers не поддерживала сжатие WebSocket на момент выхода первой реализации WebSocket. Исторически среда выполнения удаляла или игнорировала Sec-WebSocket-Extensions заголовок, но теперь может полностью соответствовать WebSocket Compression RFC. Поскольку многие клиенты, вероятно, отправляют Sec-WebSocket-Extensions: permessage-deflate своим Workers уже сегодня (new WebSocket(url) автоматически устанавливает это в браузерах), мы решили сохранить прежнее поведение, если этот флаг отсутствует.
Если этот флаг указан, среда выполнения Workers может использовать сжатие WebSocket как для входящих, так и для исходящих соединений WebSocket.
Подобно браузерам, вызов new WebSocket(url) в Worker автоматически устанавливает Sec-WebSocket-Extensions: permessage-deflate заголовок. Если вы используете нестандартный fetch() API для получения WebSocket можно указать Sec-WebSocket-Extensions заголовок со значением permessage-deflate и включить любые параметры сжатия, определённые в RFC-7692 ↗.
Строгая проверка ошибок криптографии
| По умолчанию с | 2023-08-01 |
| Флаг для включения | strict_crypto_checks |
| Флаг для отключения | no_strict_crypto_checks |
Выполнять дополнительную проверку ошибок в Web Crypto API для соответствия спецификации и отклонять потенциально небезопасные параметры ключа:
- При генерации ключей RSA их размер должен быть кратен 128 битам, иначе boringssl может усечь ключ.
- Размер импортированных ключей RSA должен быть не менее 256 бит и не более 16384 бит, как и у вновь создаваемых ключей.
- Открытая экспонента для импортированных ключей RSA ограничена часто используемыми значениями
[3, 17, 37, 65537]. - В соответствии со спецификацией при попытке импортировать открытый ключ ECDH с непустым списком usages будет выброшена ошибка.
Строгая проверка ошибок сжатия
| По умолчанию с | 2023-08-01 |
| Флаг для включения | strict_compression_checks |
| Флаг для отключения | no_strict_compression_checks |
Выполнять дополнительную проверку ошибок в Compression Streams API и выбрасывать ошибку, если DecompressionStream содержит завершающие данные или закрывается до того, как были предоставлены все сжатые данные.
Переопределяет настройки кэша правил кэширования в request.cf объект для Fetch API
| По умолчанию с | 2025-04-02 |
| Флаг для включения | request_cf_overrides_cache_rules |
| Флаг для отключения | no_request_cf_overrides_cache_rules |
Этот флаг изменяет поведение кеша при запросе ресурсов через Fetch API. Настройки кеша, указанные в request.cf объект, например cacheEverything и cacheTtl, теперь имеют приоритет над любыми Cache Rules задан.
Данные Bot Management
| По умолчанию с | 2023-08-01 |
| Флаг для включения | no_cf_botmanagement_default |
| Флаг для отключения | cf_botmanagement_default |
Этот флаг оптимизирует запросы Workers, сокращая количество лишних свойств в request.cf объект.
Если флаг включен, будь то по умолчанию после 2023-08-01 или в результате установки no_cf_botmanagement_default флаг: Cloudflare будет включать только Объект Bot Management в Worker request.cf если у аккаунта есть доступ к Bot Management.
При отключенном флаге Cloudflare будет включать объект Bot Management по умолчанию независимо от того, включен ли Bot Management в тарифе аккаунта.
Аргумент value для delete() и has() в URLSearchParams
| По умолчанию с | 2023-07-01 |
| Флаг для включения | urlsearchparams_delete_has_value_arg |
| Флаг для отключения | no_urlsearchparams_delete_has_value_arg |
WHATWG добавил дополнительные необязательные аргументы в URLSearchParams объект delete() ↗ и has() ↗ методы, позволяющие точнее контролировать удаление параметров запроса. Поскольку
аргументы необязательны и меняют поведение методов при их наличии, есть риск
сломать существующий код. Если дата совместимости установлена на 1 июля 2023 года или позже, этот флаг совместимости будет включён по умолчанию.
Пример того, как это изменение может сломать существующий код, рассмотрите код, использующий Array forEach() метод для перебора нескольких параметров, которые нужно удалить:
const usp = new URLSearchParams();
// ...
['abc', 'xyz'].forEach(usp.delete.bind(usp)); forEach() автоматически передаёт несколько параметров в переданную функцию. До появления новых стандартных параметров эти дополнительные аргументы просто игнорировались.
Однако теперь дополнительные аргументы имеют значение и меняют поведение функции. С этим флагом пример выше пришлось бы изменить так:
const usp = new URLSearchParams();
// ...
['abc', 'xyz'].forEach((key) => usp.delete(key));Используйте реализацию URL, соответствующую спецификации, в редиректах
| По умолчанию с | 2023-03-14 |
| Флаг для включения | response_redirect_url_standard |
| Флаг для отключения | response_redirect_url_original |
Измените реализацию URL, используемую в Response.redirect() соответствовать спецификации (WHATWG URL Standard).
Dynamic Dispatch Exception Propagation
| По умолчанию с | 2023-03-01 |
| Флаг для включения | dynamic_dispatch_tunnel_exceptions |
| Флаг для отключения | dynamic_dispatch_treat_exceptions_as_500 |
Ранее при использовании Workers for Platforms API динамической диспетчеризации чтобы отправить HTTP-запрос пользовательскому Worker. Если пользовательский Worker выбросил исключение, Worker динамической диспетчеризации получит HTTP 500 ошибку без тела. Когда dynamic_dispatch_tunnel_exceptions флаг совместимости включён, исключение вместо этого будет передано обратно в Worker динамической маршрутизации. fetch() вызов в Worker динамической маршрутизации выбросит то же исключение. Это соответствует аналогичному поведению привязки к сервисам и Durable Objects.
Headers поддерживает getSetCookie()
| По умолчанию с | 2023-03-01 |
| Флаг для включения | http_headers_getsetcookie |
| Флаг для отключения | no_http_headers_getsetcookie |
Добавляет getSetCookie() ↗ метод к Headers ↗ API в Workers.
const response = await fetch("https://example.com");
let cookieValues = response.headers.getSetCookie();Совместимость с Node.js
| По умолчанию с | 2026-08-04 |
| Флаг для включения | nodejs_compat |
| Флаг для отключения | no_nodejs_compat |
Включает API Node.js в Workers Runtime. Для дат совместимости 2026-08-04 или более поздней версии Workers включает оба nodejs_compat и nodejs_compat_v2 по умолчанию.
Обратите внимание, что некоторые API Node.js включаются только тогда, когда дата совместимости Worker не раньше следующих дат:
| API Node.js | Включено с nodejs_compat начиная с указанной даты |
|---|---|
Отключить Top-level Await в require() |
2024-12-02 |
process.env |
2025-04-01 |
node:http, node:https |
2025-08-15 |
http.server |
2025-09-01 |
Некоторые модули Node.js доступны в Workers только в виде нерабочих заглушек. Их можно импортировать или подключить через require, но они не содержат рабочей реализации соответствующих API Node.js. Заглушки существуют для совместимости с пакетами, которые проверяют наличие модуля, и не предназначены для прямого использования в коде приложения.
Следующие stubs включаются автоматически, только если nodejs_compat включен, а дата совместимости вашего Worker совпадает с указанной или более поздняя:
| Заглушка модуля | Включено с nodejs_compat начиная с указанной даты |
Включить флаг | Отключить флаг |
|---|---|---|---|
node:http2 ↗ |
2025-09-01 |
enable_nodejs_http2_module |
disable_nodejs_http2_module |
node:vm ↗ |
2025-10-01 |
enable_nodejs_vm_module |
disable_nodejs_vm_module |
node:cluster ↗ |
2025-12-04 |
enable_nodejs_cluster_module |
disable_nodejs_cluster_module |
node:domain ↗ |
2025-12-04 |
enable_nodejs_domain_module |
disable_nodejs_domain_module |
node:trace_events ↗ |
2025-12-04 |
enable_nodejs_trace_events_module |
disable_nodejs_trace_events_module |
node:wasi ↗ |
2025-12-04 |
enable_nodejs_wasi_module |
disable_nodejs_wasi_module |
node:_stream_wrap |
2026-01-29 |
enable_nodejs_stream_wrap_module |
disable_nodejs_stream_wrap_module |
node:dgram ↗ |
2026-01-29 |
enable_nodejs_dgram_module |
disable_nodejs_dgram_module |
node:inspector ↗ |
2026-01-29 |
enable_nodejs_inspector_module |
disable_nodejs_inspector_module |
node:sqlite ↗ |
2026-01-29 |
enable_nodejs_sqlite_module |
disable_nodejs_sqlite_module |
node:child_process ↗ |
2026-03-17 |
enable_nodejs_child_process_module |
disable_nodejs_child_process_module |
node:readline ↗ |
2026-03-17 |
enable_nodejs_readline_module |
disable_nodejs_readline_module |
node:repl ↗ |
2026-03-17 |
enable_nodejs_repl_module |
disable_nodejs_repl_module |
node:tty ↗ |
2026-03-17 |
enable_nodejs_tty_module |
disable_nodejs_tty_module |
node:v8 ↗ |
2026-03-17 |
enable_nodejs_v8_module |
disable_nodejs_v8_module |
node:worker_threads ↗ |
2026-03-17 |
enable_nodejs_worker_threads_module |
disable_nodejs_worker_threads_module |
При включении nodejs_compat, рекомендуем использовать последнюю версию Wrangler CLI, и самую последнюю compatibility date для максимальной совместимости. Некоторые старые версии Wrangler добавляют дополнительные полифиллы, которые больше не нужны, если ваш Worker использует более позднюю compatibility date, поскольку их уже предоставляет среда выполнения Workers.
Для дат совместимости 2026-08-04 или более поздней версии, nodejs_compat и nodejs_compat_v2 не используются, потому что compatibility date включает такое же поведение. Существующим проектам не нужно удалять эти флаги при обновлении compatibility date. Чтобы полностью отключить совместимость с Node.js, удалите положительные флаги, если они заданы. Затем добавьте оба no_nodejs_compat и no_nodejs_compat_v2.
Если при использовании определённого npm-пакета в Workers у вас возникают ошибки, сначала попробуйте обновить дату совместимости и использовать последнюю версию Wrangler CLI или Cloudflare Vite Plugin. Если проблема сохраняется, сообщите об этом через создание issue на GitHub ↗.
Конструкторы Streams
| По умолчанию с | 2022-11-30 |
| Флаг для включения | streams_enable_constructors |
| Флаг для отключения | streams_disable_constructors |
Добавляет незавершенную new ReadableStream() и new WritableStream() конструкторы, работающие поверх базовых источников и приёмников JavaScript.
Соответствующий стандарту конструктор TransformStream
| По умолчанию с | 2022-11-30 |
| Флаг для включения | transformstream_enable_standard_constructor |
| Флаг для отключения | transformstream_disable_standard_constructor |
Ранее new TransformStream() конструктор не соответствовал стандарту Streams API. Используйте transformstream_enable_standard_constructor чтобы включить обратно несовместимое изменение, приводящее конструктор в соответствие. Должен использоваться вместе с streams_enable_constructors флаг.
Модули CommonJS не экспортируют пространство имен модуля
| По умолчанию с | 2022-10-31 |
| Флаг для включения | export_commonjs_default |
| Флаг для отключения | export_commonjs_namespace |
Ранее модули CommonJS экспортировали пространство имен модуля (объект наподобие { default: module.exports }) а не экспортировать только module.exports. Когда этот флаг включён, экспорт фиксируется.
Не используйте throw в async функциях
| По умолчанию с | 2022-10-31 |
| Флаг для включения | capture_async_api_throws |
| Флаг для отключения | do_not_capture_async_api_throws |
capture_async_api_throws флаг совместимости гарантирует, что в соответствии со стандартным API async-функции будут отклоняться только при выбросе ошибки. Обратный do_not_capture_async_api_throws флаг означает, что асинхронные функции, содержащие ошибку, могут выбрасывать эту ошибку синхронно, а не отклонять промис.
Новая реализация парсера URL
| По умолчанию с | 2022-10-31 |
| Флаг для включения | url_standard |
| Флаг для отключения | url_original |
Исходная реализация URL ↗ API в Workers не полностью соответствовал WHATWG URL Standard ↗, отличаясь в нескольких аспектах, включая:
-
Исходная реализация схлопывала последовательности из нескольких слэшей в один слэш:
new URL("https://example.com/a//b").toString() === "https://example.com/a/b" -
Исходная реализация выбрасывала
"TypeError: Invalid URL string."если были обнаружены некорректные percent-encoded escape последовательности, напримерhttps://example.com/a%%b. -
Исходная реализация по-другому выполняла percent-encode или percent-decode для некоторого содержимого:
new URL("https://example.com/a%40b?c d%20e?f").toString() === "https://example.com/a@b?c+d+e%3Ff" -
В исходной реализации отсутствовали более поздние
URLфункции, такие какURL.canParse()↗.
Установите compatibility date вашего Worker на дату после 2022-10-31 или включите url_standard флаг совместимости, чтобы включить полностью соответствующий спецификации URL реализация API.
См. response_redirect_url_standard флаг совместимости , что влияет на реализацию URL, используемую в Response.redirect().
R2 бакет list учитывает include параметр
| По умолчанию с | 2022-08-04 |
| Флаг для включения | r2_list_honor_include |
С r2_list_honor_include флаг, include аргумент в R2 list параметры учитываются. При более старой дате совместимости и без этого флага include аргумент неявно ведёт себя как include: ["httpMetadata", "customMetadata"].
Не заменяйте null на TypeError
| По умолчанию с | 2022-06-01 |
| Флаг для включения | dont_substitute_null_on_type_error |
| Флаг для отключения | substitute_null_on_type_error |
В рантайме была ошибка, из-за которой при передаче во встроенные API недопустимые значения иногда ошибочно приводились к null. Вместо этого TypeError должно было быть выброшено исключение. dont_substitute_null_on_type_error исправляет это поведение, чтобы в таких случаях корректно выбрасывалась ошибка.
Минимум подзапросов
| По умолчанию с | 2022-04-05 |
| Флаг для включения | minimal_subrequests |
| Флаг для отключения | no_minimal_subrequests |
С minimal_subrequests флаг, fetch() подзапросы, отправляемые к эндпоинтам в собственной зоне Worker (также называемые подзапросами в пределах одной зоны), применяются с урезанным набором функций. В целом эти функции изначально не должны были применяться к подзапросам в пределах одной зоны, и заметных для пользователя изменений в поведении ожидается очень мало. В частности, при использовании нового флага Workers могут столкнуться со следующими изменениями поведения:
- Тела ответов больше не будут по возможности сжиматься gzip перед передачей в среду выполнения Workers. Если Worker считывает тело ответа, он получит его в виде обычного текста, как и раньше, поэтому отключение этой настройки избавляет от лишней декомпрессии. Если же Worker просто передаёт ответ клиенту, HTTP-прокси Cloudflare по возможности сжимает тело ответа gzip уже на своей стороне, за пределами среды выполнения Workers. Изменение в поведении, которое может заметить скрипт Worker, состоит в том, что некоторые
Content-Encoding: gzipзаголовки больше не будут появляться. - Ранее Automatic Platform Optimization в некоторых случаях могла применяться как к исходному запросу Worker, так и к его подзапросам. Теперь она будет применяться только к исходному запросу.
- Теперь предзагрузка ссылок применяется только к ответу Worker, а не к ответам на подзапросы Worker.
Глобальный navigator
| По умолчанию с | 2022-03-21 |
| Флаг для включения | global_navigator |
| Флаг для отключения | no_global_navigator |
С global_navigator флаг, новый глобальный navigator свойство доступно внутри Workers. На данный момент оно предоставляет только одно navigator.userAgent свойство, значение которого установлено в 'Cloudflare-Workers'. Это свойство можно использовать для надёжного определения того, выполняется ли код в среде Workers.
Не используйте Custom Origin Trust Store для внешних подзапросов
| По умолчанию с | 2022-03-08 |
| Флаг для включения | no_cots_on_external_fetch |
| Флаг для отключения | cots_on_external_fetch |
no_cots_on_external_fetch флаг отключает использование Custom Origin Trust Store при выполнении внешних (grey-clouded) подзапросов из Cloudflare Worker.
Сеттеры/геттеры в прототипах объектов API
| По умолчанию с | 2022-01-31 |
| Флаг для включения | workers_api_getters_setters_on_prototype |
| Флаг для отключения | workers_api_getters_setters_on_instance |
Изначально свойства объектов Workers API определялись как свойства экземпляра, а не свойства прототипа. Это нарушало возможность наследования на уровне JavaScript и не позволяло подклассу корректно переопределять геттеры и сеттеры суперкласса. Этот флаг отвечает за критическое изменение, благодаря которому эти геттеры и сеттеры задаются в шаблоне прототипа.
Это изменение применяется к:
AbortSignalAbortControllerBlobBodyDigestStreamEventFileRequestReadableStreamReadableStreamDefaultReaderReadableStreamBYOBReaderResponseTextDecoderTextEncoderTransformStreamURLWebSocketWritableStreamWritableStreamDefaultWriter
Durable Object stub.fetch() требует полный URL
| По умолчанию с | 2021-11-10 |
| Флаг для включения | durable_object_fetch_requires_full_url |
| Флаг для отключения | durable_object_fetch_allows_relative_url |
Изначально при отправке запроса к Durable Object с помощью вызова stub.fetch(url), в качестве входных данных принимался относительный URL. Такой URL интерпретировался относительно URL-заполнителя http://fake-host, и итоговый абсолютный URL передавался в fetch() обработчик. Такое поведение было ошибочным: полные URL должны были быть обязательными. Этот флаг делает полные URL обязательными.
fetch() неправильно интерпретирует неизвестные протоколы как HTTP
| По умолчанию с | 2021-11-10 |
| Флаг для включения | fetch_refuses_unknown_protocols |
| Флаг для отключения | fetch_treats_unknown_protocols_as_http |
Изначально, если fetch() функции был передан URL, задающий протокол, отличный от http: или https:, он молча обработает его так, как если бы это был http:. Например, fetch() предположительно принимает ftp: URL, но на самом деле выполнял HTTP-запросы.
Обратите внимание, что Cloudflare Workers поддерживает нестандартное расширение для fetch() чтобы добавить поддержку WebSocket. Однако при HTTP-запросе, предназначенном для инициации WebSocket-рукопожатия, всё равно следует использовать http: или https: в качестве протокола, а не ws: ни wss:.
ws: и wss: Схемы URL предназначены для использования вместе с new WebSocket() конструктор, который поддерживает исключительно WebSocket. Расширение для fetch() спроектирован для поддержки HTTP и WebSocket в рамках одного запроса (ответ может как инициировать переход на WebSocket, так и не делать этого), поэтому все запросы рассматриваются как HTTP.
Читатель Streams BYOB отсоединяет буфер
| По умолчанию с | 2021-11-10 |
| Флаг для включения | streams_byob_reader_detaches_buffer |
| Флаг для отключения | streams_byob_reader_does_not_detach_buffer |
Изначально среда выполнения Workers не отсоединяла ArrayBuffers из предоставленных пользователем TypedArrays при использовании BYOB-ридера read() метод, как того требует спецификация Streams, а значит, можно было случайно повторно использовать один и тот же буфер для нескольких read() вызовы. Это изменение приводит Workers в соответствие со спецификацией.
Пользовательский код никогда не должен пытаться повторно использовать ArrayBuffer который был передан в BYOB-ридера read() метод. Вместо этого пользовательский код может повторно использовать ArrayBuffer лежащий в основе результата read() Promise, как показано в примере ниже.
// Consume and discard `readable` using a single 4KiB buffer.
let reader = readable.getReader({ mode: "byob" });
let arrayBufferView = new Uint8Array(4096);
while (true) {
let result = await reader.read(arrayBufferView);
if (result.done) break;
// Optionally something with `result` here.
// Re-use the same memory for the next `read()` by creating
// a new Uint8Array backed by the result's ArrayBuffer.
arrayBufferView = new Uint8Array(result.value.buffer);
}Более новый метод расширения readAtLeast() всегда отсоединяет ArrayBuffer и не зависит от этого флага функции.
FormData разбор поддерживает File
| По умолчанию с | 2021-11-03 |
| Флаг для включения | formdata_parser_supports_files |
| Флаг для отключения | formdata_parser_converts_files_to_strings |
FormData API ↗ используется для разбора данных (особенно тела HTTP-запросов) в multipart/form-data формате.
Первоначально в среде выполнения Workers реализация FormData API некорректно преобразовывал загруженные файлы в строки. Поэтому formData.get("filename") вернёт строку с содержимым файла вместо File объект. Это изменение устраняет проблему, поскольку файлы теперь представляются с помощью File как указано в стандарте.
HTMLRewriter обработка <esi:include>
| Флаг для включения | html_rewriter_treats_esi_include_as_void_tag |
Стандарт HTML5 определяет фиксированный набор элементов как «пустые» (void elements), то есть без закрывающего тега: <area>, <base>, <br>, <col>, <command>, <embed>, <hr>, <img>, <input>, <keygen>, <link>, <meta>, <param>, <source>, <track>, а также <wbr>.
HTML5 не поддерживает синтаксис самозакрывающихся тегов XML. Например, <script src="foo.js" /> не задает элемент script без тела. Тег </script> закрывающий тег всё равно обязателен. /> синтаксис вообще не распознается HTML5 и обрабатывается так же, как >. Однако многие разработчики по-прежнему предпочитают этот синтаксис как наследие XHTML, стандарта, который не прижился в начале 2000-х годов.
<esi:include> и <esi:comment> это два тега, которые не входят в стандарт HTML5, а используются как часть Edge Side Includes ↗, технология для модификации HTML на стороне сервера. Такие теги обычно не содержат тела и, как правило, записываются с использованием самозакрывающегося синтаксиса XML.
HTMLRewriter спроектирован для разбора стандартного HTML5, а не ESI. Однако было бы полезно реализовать некоторые части ESI с помощью HTMLRewriter. Для этого данный флаг совместимости приводит к тому, что HTMLRewriter чтобы обрабатывать <esi:include> и <esi:comment> как void-теги, чтобы их можно было корректно разбирать и обрабатывать.
Экспериментальные флаги
Эти флаги можно включить через compatibility_flags, но пока не запланированы стать поведением по умолчанию к какой-либо конкретной дате.
Потребители Queue не ожидают ctx.waitUntil() до разрешения
| Флаг для включения | queue_consumer_no_wait_for_wait_until |
По умолчанию Queues Consumer Workers подтверждают получение сообщений только после того, как промисы, переданные в ctx.waitUntil() были выполнены. Из-за этого потребители очереди, использующие ctx.waitUntil() для медленной обработки сообщений. Поведение по умолчанию описано в разделе Руководство по настройке потребителя Queues.
Этот Consumer Worker показывает пример Worker, который использует ctx.waitUntil(). При поведении по умолчанию этот Worker-потребитель подтверждает пакет сообщений только после завершения функции sleep.
export default {
async fetch(request, env, ctx) {
// omitted
},
async queue(batch, env, ctx) {
console.log(`received batch of ${batch.messages.length} messages to queue ${batch.queue}`);
for (let i = 0; i < batch.messages.length; ++i) {
console.log(`message #${i}: ${JSON.stringify(batch.messages[i])}`);
}
ctx.waitUntil(sleep(30 * 1000));
}
};
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}Если queue_consumer_no_wait_for_wait_until флаг включён, потребители Queues больше не будут ожидать промисы, переданные в ctx.waitUntil() до разрешения, прежде чем подтверждать сообщения. Это может повысить производительность потребителей очереди, использующих ctx.waitUntil(). При включённом флаге в примере выше Worker-потребитель подтвердит пакет, не дожидаясь завершения функции sleep.
Использование этого флага не повлияет на поведение ctx.waitUntil(). ctx.waitUntil() продолжит продлевать время жизни вашего Worker-потребителя, чтобы он продолжал работать даже после подтверждения пакета сообщений.
HTMLRewriter обработка <esi:include>
| Флаг для включения | html_rewriter_treats_esi_include_as_void_tag |
Стандарт HTML5 определяет фиксированный набор элементов как «пустые» (void elements), то есть без закрывающего тега: <area>, <base>, <br>, <col>, <command>, <embed>, <hr>, <img>, <input>, <keygen>, <link>, <meta>, <param>, <source>, <track>, а также <wbr>.
HTML5 не поддерживает синтаксис самозакрывающихся тегов XML. Например, <script src="foo.js" /> не задает элемент script без тела. Тег </script> закрывающий тег всё равно обязателен. /> синтаксис вообще не распознается HTML5 и обрабатывается так же, как >. Однако многие разработчики по-прежнему предпочитают этот синтаксис как наследие XHTML, стандарта, который не прижился в начале 2000-х годов.
<esi:include> и <esi:comment> это два тега, которые не входят в стандарт HTML5, а используются как часть Edge Side Includes ↗, технология для модификации HTML на стороне сервера. Такие теги обычно не содержат тела и, как правило, записываются с использованием самозакрывающегося синтаксиса XML.
HTMLRewriter спроектирован для разбора стандартного HTML5, а не ESI. Однако было бы полезно реализовать некоторые части ESI с помощью HTMLRewriter. Для этого данный флаг совместимости приводит к тому, что HTMLRewriter чтобы обрабатывать <esi:include> и <esi:comment> как void-теги, чтобы их можно было корректно разбирать и обрабатывать.