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

Известные проблемы

Ниже перечислены некоторые известные ошибки и проблемы, о которых следует знать при использовании 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"
// -> B

wrangler dev

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 API

Fetch-запросы к 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')