← Cloudflare Workers / workers / platform
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
- Při určování specifičnosti trasy platí, že koncové
/*ve vašem vzoru nemusí fungovat podle očekávání.
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"
// -> BVš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"
// -> Bwrangler dev
- Při spuštění
wrangler dev --remote, všem odchozím požadavkům se přiřadícf-workers-preview-tokenhlavičku, kterou Cloudflare rozpozná jako preview požadavek. Platí to pro celou síť Cloudflare, takže HTTP požadavky na jiné zóny Cloudflare se z bezpečnostních důvodů v tuto chvíli zahazují. Chcete-li to obejít, vložte do svého skriptu Workeru následující kód:
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 codePo 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 APIFetch 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')