← Cloudflare Workers / workers / platform
Известные проблемы
Ниже перечислены некоторые известные ошибки и проблемы, о которых следует знать при использовании Cloudflare Workers.
Специфичность маршрута
- При определении специфичности маршрута завершающий
/*в вашем шаблоне может работать не так, как ожидается.
Рассмотрим два разных Worker, каждый из которых развернут в одной зоне. Worker A назначен example.com/images/* маршрут, а Worker B получает example.com/images* шаблон маршрута. При таких настройках следующие URL-адреса будут обрабатываться так:
// (A) example.com/images/*
// (B) example.com/images*
"example.com/images"
// -> B
"example.com/images123"
// -> B
"example.com/images/hello"
// -> BВы заметите, что все примеры запускают Worker B. Это касается и последнего примера, который иллюстрирует неожиданное поведение.
При добавлении подстановочного знака (wildcard) на поддомене следующие URL разрешаются так:
// (A) *.example.com/a
// (B) a.example.com/*
"a.example.com/a"
// -> Bwrangler dev
- При выполнении
wrangler dev --remote, всем исходящим запросам присваиваетсяcf-workers-preview-tokenзаголовок, который Cloudflare распознаёт как превью запрос. Это действует для всей сети Cloudflare, поэтому HTTP запросы к другим зонам Cloudflare в настоящее время отклоняются из соображений безопасности. Чтобы включить обходное решение, вставьте следующий код в скрипт Worker:
const request = new Request(url, incomingRequest);
request.headers.delete('cf-workers-preview-token');
return await fetch(request);Fetch API в CNAME-конфигурации
Когда вы выполняете подзапрос с помощью fetch() из Worker используется DNS-резолвер Cloudflare. Когда у зоны есть Частичная настройка (CNAME), все имена хостов, которые Worker должен уметь разрешать, требуют отдельной DNS-записи в настройках DNS Cloudflare. В противном случае вызов Fetch API завершится ошибкой с кодом состояния 530 (1016).
Настройка при отсутствующих записях DNS в Cloudflare DNS
// Zone in partial setup: example.com
// DNS records at Authoritative DNS: sub1.example.com, sub2.example.com, ...
// DNS records at Cloudflare DNS: sub1.example.com
"sub1.example.com/"
// -> Can be resolved by Fetch API
"sub2.example.com/"
// -> Cannot be resolved by Fetch API, will lead to 530 status codeПосле добавления sub2.example.com в Cloudflare DNS
// Zone in partial setup: example.com
// DNS records at Authoritative DNS: sub1.example.com, sub2.example.com, ...
// DNS records at Cloudflare DNS: sub1.example.com, sub2.example.com
"sub1.example.com/"
// -> Can be resolved by Fetch API
"sub2.example.com/"
// -> Can be resolved by Fetch APIFetch-запросы к IP-адресам
Для подзапросов Workers запросы можно отправлять только на URL, а не напрямую на IP-адреса. Чтобы обойти это ограничение, добавьте запись A или AAAA в вашу зону ↗ а затем получите этот ресурс.
Например, в зоне example.com создать запись типа A с именем server и значение 192.0.2.1, а затем используйте:
await fetch('http://server.example.com')Не используйте:
await fetch('http://192.0.2.1')