INTEGRITY Dokumentace

Známé problémy

Níže jsou uvedeny některé známé chyby a problémy, na které je třeba dávat pozor při používání Cloudflare Workers.

Specifičnost trasy

Uvažujme dva různé Workery nasazené do stejné zóny. Workeru A je přiřazen example.com/images/* trasu a Worker B dostane example.com/images* vzor trasy. S těmito pravidly se následující URL adresy vyřeší takto:

// (A) example.com/images/*
// (B) example.com/images*

"example.com/images"
// -> B
"example.com/images123"
// -> B
"example.com/images/hello"
// -> B

Všimnete si, že všechny příklady spouštějí Worker B. Platí to i pro poslední příklad, který demonstruje neočekávané chování.

Při přidání zástupného znaku (wildcard) na subdoménu se následující URL adresy přeloží takto:

// (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 v nastavení CNAME

Když odešlete subrequest pomocí fetch() z Workeru, použije se DNS resolver Cloudflare. Pokud má zóna Částečné nastavení (CNAME), všechny názvy hostitelů, které Worker potřebuje umět přeložit, vyžadují vlastní záznam DNS v nastavení DNS Cloudflare. Jinak volání Fetch API selže se stavovým kódem 530 (1016).

Nastavení s chybějícími DNS záznamy v 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

Po přidání sub2.example.com na 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 na IP adresy

U subrequestů Workers lze požadavky odesílat pouze na URL, nikoli přímo na IP adresy. Chcete-li toto omezení obejít, přidejte do své zóny záznam typu A nebo AAAA a poté daný prostředek načtěte.

Například v zóně example.com vytvořit záznam typu A s názvem server a hodnota 192.0.2.1, a poté použijte:

await fetch('http://server.example.com')

Nepoužívejte:

await fetch('http://192.0.2.1')