INTEGRITY Dokumentace

Fetch

Fetch API poskytuje rozhraní pro asynchronní načítání zdrojů prostřednictvím HTTP požadavků uvnitř Workeru.

Syntaxe

export default {
	async scheduled(controller, env, ctx) {
		return await fetch("https://example.com", {
			headers: {
				"X-Source": "Cloudflare-Workers",
			},
		});
	},
};
addEventListener("fetch", (event) => {
	// NOTE: can’t use fetch here, as we’re not in an async scope yet
	event.respondWith(eventHandler(event));
});

async function eventHandler(event) {
	// fetch can be awaited here since `event.respondWith()` waits for the Promise it receives to settle
	const resp = await fetch(event.request);
	return resp;
}
from workers import WorkerEntrypoint, Response, fetch

class Default(WorkerEntrypoint):
    async def scheduled(self, controller, env, ctx):
  			return await fetch("https://example.com", headers={"X-Source": "Cloudflare-Workers"})

Parametry


Jak Accept-Encoding hlavička je zpracována

Při vytváření podpožadavku pomocí fetch() API můžete určit, jaké formy komprese preferujete v odpovědi serveru (pokud je server podporuje), a to zahrnutím Accept-Encoding hlavička.

Workers podporují kompresní algoritmy gzip i brotli. Obvykle není nutné uvádět Accept-Encoding nebo Content-Encoding hlavičky v produkčním prostředí Workers Runtime: komprese brotli nebo gzip se automaticky vyžádá při načítání dat z origin serveru a použije se na odpověď při jejich vrácení klientovi, podle možností klienta a origin serveru.

Chcete-li podporovat vyžádání brotli z origin serveru, musíte povolit brotli_content_encoding příznak kompatibility ve Workeru. Tento příznak kompatibility bude brzy ve výchozím nastavení povolen pro všechny Workery od nadcházejícího data kompatibility.

Chování passthrough

Jeden scénář, ve kterém je hlavička Accept-Encoding užitečná, nastává při předávání komprimovaných dat ze serveru klientovi: Accept-Encoding umožňuje workeru přijmout komprimovaný datový proud přímo ze serveru, aniž by byl předtím dekomprimován. Pokud tělo komprimované odpovědi nepřečtete před jejím vrácením klientovi a zachováte Content-Encoding hlavičku nedotčenou, projde beze změny, aniž by se dekomprimovala a znovu komprimovala. To se hodí, když používáte Workers před origin servery nebo když načítáte komprimovaná mediální aktiva, protože zajistíte, aby se v odpovědi, kterou váš Worker vrátí, použila stejná komprese jako na origin serveru.

Kromě změny kódování obsahu je rekomprese potřeba i tehdy, když odpověď používá kódování, které klient nepodporuje. Pokud Worker jako kódování požaduje brotli nebo gzip, ale klient podporuje pouze gzip, rekomprese bude potřeba i v případě, že server vrátí data zakódovaná pomocí brotli (a bude provedena automaticky). Toto chování se může lišit také podle pravidla komprese, pomocí kterého lze nastavit, jaká komprese se má použít pro různé typy dat na straně serveru.

export default {
	async fetch(request) {
		// Accept brotli or gzip compression
		const headers = new Headers({
			"Accept-Encoding": "br, gzip",
		});
		let response = await fetch("https://developers.cloudflare.com", {
			method: "GET",
			headers,
		});

		// As long as the original response body is returned and the Content-Encoding header is
		// preserved, the same encoded data will be returned without needing to be compressed again.
		return new Response(response.body, {
			status: response.status,
			statusText: response.statusText,
			headers: response.headers,
		});
	},
};