← Cloudflare Workers / workers / runtime-apis
Požadavek
Request ↗ rozhraní představuje HTTP požadavek a je součástí Fetch API.
Kontext
Nejběžnější způsob, jak se setkáte s Request objekt je jako vlastnost příchozího požadavku:
export default {
async fetch(request, env, ctx) {
return new Response('Hello World!');
},
};Můžete si také vytvořit Request sami, když potřebujete upravit objekt požadavku, protože příchozí request parametru, který obdržíte z fetch() handler je neměnné.
export default {
async fetch(request, env, ctx) {
const url = "https://example.com";
const modifiedRequest = new Request(url, request);
// ...
},
}; fetch() handler vyvolá Request konstruktor. RequestInit a RequestInitCfProperties typy definované níže také popisují platné parametry, které lze předat fetch() handler.
Konstruktor
let request = new Request(input, options)Parametry
-
inputstring | Request- Buď řetězec obsahující URL, nebo existující
Requestobjekt.
- Buď řetězec obsahující URL, nebo existující
-
optionsmožnosti nepovinné- Volitelný objekt options, který obsahuje nastavení pro
Request.
- Volitelný objekt options, který obsahuje nastavení pro
options
Objekt obsahující vlastnosti, které chcete použít na požadavek.
-
cacheundefined | 'no-store' | 'no-cache'volitelné- Standardní HTTP
cachehlavička. Pouzecache: 'no-store'acache: 'no-cache'jsou podporovány. Jakákoli jiná hlavička cache povede kTypeErrorse zprávouUnsupported cache mode: <attempted-cache-mode>.
- Standardní HTTP
-
cfRequestInitCfProperties volitelné- Vlastnosti specifické pro Cloudflare, které lze nastavit na
Requestkteré řídí, jak globální síť Cloudflare požadavek zpracuje.
- Vlastnosti specifické pro Cloudflare, které lze nastavit na
-
methodstringvolitelné- Metoda požadavku HTTP. Výchozí hodnota je
GET. Ve Workers jsou všechny Metody HTTP požadavků ↗ jsou podporovány, s výjimkouCONNECT↗.
- Metoda požadavku HTTP. Výchozí hodnota je
-
headersHeaders volitelné -
bodystring | ReadableStream | FormData | URLSearchParams volitelné- Tělo požadavku, pokud existuje.
- Mějte na paměti, že požadavek s metodou GET nebo HEAD nemůže obsahovat tělo.
-
redirectstringvolitelné- Režim přesměrování, který se má použít:
follow,error, nebomanual. Výchozí pro novýRequestobjekt jefollow. Mějte však na paměti, že příchozíRequestvlastnost objektuFetchEventbude mít režim přesměrovánímanual.
- Režim přesměrování, který se má použít:
-
signalAbortSignal, volitelné- Pokud je zadán, lze požadavek zrušit vyvoláním abortu na odpovídajícím
AbortController.
- Pokud je zadán, lze požadavek zrušit vyvoláním abortu na odpovídajícím
cf vlastnost (RequestInitCfProperties)
Objekt obsahující vlastnosti specifické pro Cloudflare, které lze nastavit na Request objekt. Například:
// Disable ScrapeShield for this request.
fetch(event.request, { cf: { scrapeShield: false } })Neplatné nebo nesprávně pojmenované klíče v cf objekt bude tiše ignorován. Zvažte použití TypeScriptu a generování typů spuštěním wrangler types abyste zajistili správné použití cf objekt.
-
appsbooleanvolitelné- Zda Cloudflare Apps ↗ by mělo být povoleno pro tento požadavek. Výchozí hodnota je
true.
- Zda Cloudflare Apps ↗ by mělo být povoleno pro tento požadavek. Výchozí hodnota je
-
cacheEverythingbooleanvolitelné- Považuje veškerý obsah za statický a ukládá do mezipaměti všechny typy souborů nad rámec výchozího obsahu ukládaného Cloudflare do cache. Respektuje hlavičky cache z původního webového serveru. To odpovídá nastavení Page Rule Cache Level (na Cache Everything). Výchozí hodnota je
false. Tato volba se vztahuje naGETaHEADmetody požadavku, a to výhradně.
- Považuje veškerý obsah za statický a ukládá do mezipaměti všechny typy souborů nad rámec výchozího obsahu ukládaného Cloudflare do cache. Respektuje hlavičky cache z původního webového serveru. To odpovídá nastavení Page Rule Cache Level (na Cache Everything). Výchozí hodnota je
-
cacheKeystringvolitelné- To, zda jsou si dva požadavky pro účely ukládání do mezipaměti rovny, určuje jejich klíč mezipaměti. Pokud má požadavek stejný klíč mezipaměti jako nějaký předchozí požadavek, může Cloudflare poskytnout oběma stejnou odpověď uloženou v mezipaměti.
-
cacheTagsArray<string>, volitelné- Tato možnost připojí další Cache-Tag hlavičky k odpovědi z origin serveru. Díky tomu lze mazat obsah z mezipaměti na základě tagů, které poskytne Worker, aniž by bylo nutné upravovat origin server. Provádí se to pomocí Vymazání podle tagu funkce.
-
cacheTtlnumbervolitelné- Tato možnost přinutí Cloudflare uložit odpověď na tento požadavek do cache bez ohledu na to, jaké hlavičky se v odpovědi objeví. Odpovídá to nastavení dvou Page Rules: Edge Cache TTL a Cache Level (na Cache Everything). Hodnota musí být nula nebo kladné číslo. Hodnota
0znamená, že platnost cachovaného assetu okamžitě vyprší. Tato možnost se vztahuje naGETaHEADmetody požadavku, a to výhradně.
- Tato možnost přinutí Cloudflare uložit odpověď na tento požadavek do cache bez ohledu na to, jaké hlavičky se v odpovědi objeví. Odpovídá to nastavení dvou Page Rules: Edge Cache TTL a Cache Level (na Cache Everything). Hodnota musí být nula nebo kladné číslo. Hodnota
-
cacheTtlByStatus{ [key: string]: number }volitelné- Tato možnost je verzí
cacheTtlfunkci, která vybírá TTL na základě stavového kódu odpovědi. Pokud má odpověď na tento požadavek odpovídající stavový kód, Cloudflare bude cachovat po zadanou dobu a přepíše pokyny pro cache odeslané origin serverem. Například:{ "200-299": 86400, "404": 1, "500-599": 0 }. Hodnota může být libovolné celé číslo, včetně nuly a záporných čísel. Hodnota0znamená, že platnost cachovaného assetu okamžitě vyprší. Jakákoli záporná hodnota nařizuje Cloudflare vůbec necachovat. Tato možnost se vztahuje naGETaHEADmetody požadavku, a to výhradně.
- Tato možnost je verzí
-
varyRequestInitCfPropertiesVaryvolitelné- Ovládá, jak Cloudflare ukládá do mezipaměti odpovědi originu pomocí
Varyhlavičku pro jedinýfetch()požadavek. Pokud jsou zadané oběcf.varya Cache Rules Vary platí,cf.varymá přednost pro tento subrequest.
- Ovládá, jak Cloudflare ukládá do mezipaměti odpovědi originu pomocí
-
imageObject | null volitelné- Povoluje Změna velikosti obrázků pro tento požadavek. Možné hodnoty jsou popsány v Transformace obrázků pomocí Workers dokumentace.
-
polishstringvolitelné- Nastaví Polish ↗ režim. Možné hodnoty jsou
lossy,losslessnebooff.
- Nastaví Polish ↗ režim. Možné hodnoty jsou
-
resolveOverridestringvolitelné- Přesměruje požadavek na alternativní origin server přepsáním vyhledávání DNS. Hodnota
resolveOverrideurčuje alternativní název hostitele, který se použije při zjišťování IP adresy origin serveru namísto názvu hostitele uvedeného v URL.Hosthlavička požadavku bude stále odpovídat tomu, co je v adrese URL. ProtoresolveOverrideumožňuje odeslat požadavek na jiný server, než uvádí URL /Hosthlavička určuje. NicméněresolveOverridese uplatní pouze v případě, že se host z URL i host uvedený vresolveOverridejsou ve vaší zóně. Pokud některý z nich určuje hostitele z jiné zóny nebo domény, bude tato možnost z bezpečnostních důvodů ignorována. Pokud potřebujete směrovat požadavek na hostitele mimo vaši zónu (a zároveň zachovatHosthlavičku směřující do vaší zóny), nejprve v rámci své zóny vytvořte záznam CNAME směřující na externí hostitele a poté nastavteresolveOverridekterá bude ukazovat na záznam CNAME. Upozorňujeme, že z bezpečnostních důvodů není možné nastavitHosthlavičku k zadání hostitele mimo vaši zónu, pokud požadavek na tohoto hostitele skutečně nesměřuje.
- Přesměruje požadavek na alternativní origin server přepsáním vyhledávání DNS. Hodnota
-
scrapeShieldbooleanvolitelné- Zda ScrapeShield ↗ by mělo být povoleno pro tento požadavek, pokud je tak nakonfigurováno pro tuto zónu. Výchozí hodnota je
true.
- Zda ScrapeShield ↗ by mělo být povoleno pro tento požadavek, pokud je tak nakonfigurováno pro tuto zónu. Výchozí hodnota je
-
webpbooleanvolitelné
cf.vary vlastnost
cf.vary objekt řídí, jak Cloudflare zachází s hlavičkami požadavku pojmenovanými pomocí origin serveru Vary hlavička odpovědi pro jedno fetch() požadavek. Používá stejné default a headers tvar jako Cache Rules Vary, a stejné akce a chování při normalizaci jako Vary.
Pokud vynecháte cf.vary, Cloudflare pro danou zónu používá jiné chování Vary, včetně Cache Rules Vary, pokud jsou nakonfigurována.
Odpověď origin serveru musí obsahovat Vary hlavičku, aby toto nastavení ovlivnilo klíč mezipaměti. Odpověď obsahující Vary: * vždy obchází cache.
cf.vary objekt podporuje následující klíče:
| Key | Povinné | Popis |
|---|---|---|
default |
Ano | Konfigurace pro libovolný název hlavičky v odpovědi originu Vary odpověď, která není zahrnuta v headers. |
headers |
Ne | Mapa názvů hlaviček žádosti psaných malými písmeny na konfigurační objekty. |
Pokud vary objekt je přítomen, default je povinná. Prázdná vary objekt je neplatný. Neplatné cf.vary konfigurace se pro tento požadavek ignorují.
Každý objekt konfigurace hlavičky a default objekt musí obsahovat action s klíčem nastaveným na jednu z hodnot normalize, passthrough, nebo bypass. Návod najdete v Akce.
U některých názvů hlaviček lze zadat další parametry:
| Hlavička | Další klíč | Popis |
|---|---|---|
accept |
media_types |
Typy MIME, které se zachovají při normalizaci Accept hlavička. Maximálně 10 položek a 255 znaků na položku. |
accept-language |
languages |
Jazyky, které se mají zachovat při normalizaci Accept-Language hlavička. Maximálně 20 položek a 64 znaků na položku. |
default objekt a headers položky jiné než accept a accept-language podporují pouze action.
U většiny nasazení nastavte default.action na bypass, přidejte headers položky pro očekávaný origin Vary hlavičky a použijte normalize pro accept a accept-language pokud váš origin nevyžaduje nezpracované hodnoty hlaviček.
Platí následující limity a validační pravidla:
- Názvy hlaviček v
headersmusí být malými písmeny. - Názvy hlaviček mohou obsahovat malá písmena, číslice, podtržítka a spojovníky.
- Názvy hlaviček nesmí přesáhnout 128 znaků.
- Názvy hlaviček začínající na
cf-nebocf_nejsou povoleny. - Určité hop-by-hop, cache-control nebo proxy-control hlavičky nejsou povoleny. Mezi příklady patří
connection,content-length,cache-control,host,range,origin, ax-forwarded-for. headersmůže obsahovat až 50 položek.accept.media_typesmůže obsahovat až 10 položek.accept-language.languagesmůže obsahovat až 20 položek.- Hodnoty v
media_typesalanguagesmusí být neprázdné tisknutelné řetězce ASCII.
Následující fragment inicializace požadavku normalizuje Accept a Accept-Language, a cache obchází pro jakoukoli jinou hlavičku v origin Vary odpověď:
{
"cf": {
"vary": {
"default": {
"action": "bypass"
},
"headers": {
"accept": {
"action": "normalize",
"media_types": ["text/html", "application/json"]
},
"accept-language": {
"action": "normalize",
"languages": ["en", "fr", "de"]
}
}
}
}
}Vlastnosti
Všechny vlastnosti příchozího Request objekt (požadavek, který obdržíte z fetch() handler) jsou pouze pro čtení. Chcete-li upravit vlastnosti příchozího požadavku, vytvořte nový Request objekt a předá možnosti k úpravě do jeho konstruktor.
-
bodyReadableStream pouze pro čtení- Stream obsahu těla.
-
bodyUsedBoolean, jen pro čtení- Deklaruje, zda tělo odpovědi již bylo použito.
-
cfIncomingRequestCfProperties pouze pro čtení- Objekt obsahující vlastnosti příchozího požadavku poskytnuté globální sítí Cloudflare.
- Tato vlastnost je pouze pro čtení (pokud není vytvořena ze stávajícího
Request). Chcete-li upravit jeho hodnoty, předejte nové hodnoty nacfklíč kinitargument options při vytváření novéhoRequestobjekt.
-
headersHeaders pouze pro čtení-
Ve srovnání s prohlížeči klade Cloudflare Workers jen velmi málo omezení na to, jaké hlavičky můžete odesílat. Prohlížeč vám například neumožní nastavit
Cookiehlavičku, protože zpracování cookies má na starosti sám prohlížeč. Workers naproti tomu cookies nijak speciálně nerozumí a zachází sCookiehlavička jako jakákoli jiná hlavička.
-
methodstring, jen pro čtení- Obsahuje metodu požadavku, například
GET,POST, atd.
- Obsahuje metodu požadavku, například
-
redirectstring, jen pro čtení- Režim přesměrování, který se má použít:
follow,error, nebomanual.fetchmetoda bude automaticky sledovat přesměrování, pokud je režim přesměrování nastaven nafollow. Pokud je nastaveno namanual,3xxpřesměrovací odpověď se volajícímu vrátí beze změny. Výchozí hodnota pro novýRequestobjekt jefollow. Mějte však na paměti, že příchozíRequestvlastnost objektuFetchEventbude mít režim přesměrovánímanual.
- Režim přesměrování, který se má použít:
-
signalAbortSignal, jen pro čtení-
AbortSignalodpovídající tomuto požadavku. Pokud použijeteenable_request_signalpříznak kompatibility můžete k signálu připojit event listener. Díky tomu můžete před ukončením volání Workeru provést úklidové úkony nebo zapsat záznam do logu. Pokud například spustíte níže uvedený Worker a poté požadavek na straně klienta přerušíte, zapíše se následující záznam:index.jsexport default { async fetch(request, env, ctx) { // This sets up an event listener that will be called if the client disconnects from your // worker. request.signal.addEventListener("abort", () => { console.log("The request was aborted!"); }); const { readable, writable } = new IdentityTransformStream(); sendPing(writable); return new Response(readable, { headers: { "Content-Type": "text/plain" }, }); }, }; async function sendPing(writable) { const writer = writable.getWriter(); const enc = new TextEncoder(); for (;;) { // Send 'ping' every second to keep the connection alive await writer.write(enc.encode("ping\r\n")); await scheduler.wait(1000); } }index.tsexport default { async fetch(request, env, ctx): Promise<Response> { // This sets up an event listener that will be called if the client disconnects from your // worker. request.signal.addEventListener('abort', () => { console.log('The request was aborted!'); }); const { readable, writable } = new IdentityTransformStream(); sendPing(writable); return new Response(readable, { headers: { 'Content-Type': 'text/plain' } }); }, } satisfies ExportedHandler<Env>; async function sendPing(writable: WritableStream): Promise<void> { const writer = writable.getWriter(); const enc = new TextEncoder(); for (;;) { // Send 'ping' every second to keep the connection alive await writer.write(enc.encode('ping\r\n')); await scheduler.wait(1000); } }
-
-
urlstring, jen pro čtení- Obsahuje URL požadavku.
IncomingRequestCfProperties
Kromě vlastností standardního Request ↗ objekt, request.cf objekt v příchozím Request obsahuje informace o požadavku poskytnuté globální sítí Cloudflare.
Všechny tarify mají přístup k:
-
asnČíslo- ASN příchozího požadavku, například
395747.
- ASN příchozího požadavku, například
-
asOrganizationstring- Organizace, které patří ASN příchozího požadavku, například
Google Cloud.
- Organizace, které patří ASN příchozího požadavku, například
-
botManagementObject | null- Nastaveno pouze při použití Cloudflare Bot Management. Objekt s následujícími vlastnostmi:
score,verifiedBot,signedAgent,staticResource,ja3Hash,ja4, adetectionIds. Viz Proměnné Bot Management pro další podrobnosti.
- Nastaveno pouze při použití Cloudflare Bot Management. Objekt s následujícími vlastnostmi:
-
clientAcceptEncodingstring | null- Pokud Cloudflare nahradí hodnotu
Accept-Encodinghlavičky se původní hodnota uloží doclientAcceptEncodingvlastnost, například"gzip, deflate, br".
- Pokud Cloudflare nahradí hodnotu
-
clientQuicRttnumber | undefined- Vyhlazená doba obletu (RTT) mezi Cloudflare a klientem pro připojení QUIC v milisekundách. Přítomna pouze v případě, že se klient připojil přes QUIC (HTTP/3). Například
42.
- Vyhlazená doba obletu (RTT) mezi Cloudflare a klientem pro připojení QUIC v milisekundách. Přítomna pouze v případě, že se klient připojil přes QUIC (HTTP/3). Například
-
clientTcpRttnumber | undefined- Vyhlazená doba obletu (RTT) mezi klientem a Cloudflare pro připojení TCP v milisekundách. Přítomna pouze v případě, že se klient připojil přes TCP (HTTP/1 a HTTP/2). Například
22.
- Vyhlazená doba obletu (RTT) mezi klientem a Cloudflare pro připojení TCP v milisekundách. Přítomna pouze v případě, že se klient připojil přes TCP (HTTP/1 a HTTP/2). Například
-
colostring- Trojpísmenný
IATA↗ kód letiště datacentra, na které požadavek dopadl, například"DFW".
- Trojpísmenný
-
countrystring | null- Země příchozího požadavku. Dvoumístný kód země v požadavku. Jde o stejnou hodnotu, jaká je uvedena v
CF-IPCountryhlavičku, například"US".
- Země příchozího požadavku. Dvoumístný kód země v požadavku. Jde o stejnou hodnotu, jaká je uvedena v
-
edgeL4Object | undefined- Statistiky transportní vrstvy 4 pro připojení mezi klientem a Cloudflare. Obsahuje následující vlastnost:
deliveryRatenumber - nejnovější odhad rychlosti přenosu dat pro připojení v bajtech za sekundu. Například123456.
- Statistiky transportní vrstvy 4 pro připojení mezi klientem a Cloudflare. Obsahuje následující vlastnost:
-
isEUCountrystring | null- Pokud se země, ze které požadavek přichází, nachází v EU, vrátí se
"1". V opačném případě je tato vlastnost buď vynechána, nebofalse.
- Pokud se země, ze které požadavek přichází, nachází v EU, vrátí se
-
httpProtocolstring- Protokol HTTP, například
"HTTP/2".
- Protokol HTTP, například
-
hostMetadataObject | undefined- Vyplňuje se pouze v případě, že příchozí požadavek pochází ze zóny s metadaty vlastního hostname. Více informací o tom, co lze v dokumentaci Cloudflare for Platforms přidat jako metadata vlastního hostname, a jak je vystaveno na
hostMetadata.
- Vyplňuje se pouze v případě, že příchozí požadavek pochází ze zóny s metadaty vlastního hostname. Více informací o tom, co lze v dokumentaci Cloudflare for Platforms přidat jako metadata vlastního hostname, a jak je vystaveno na
-
requestPrioritystring | null- Informace o prioritizaci vyžádané prohlížečem v objektu požadavku, například
"weight=192;exclusive=0;group=3;group-weight=127".
- Informace o prioritizaci vyžádané prohlížečem v objektu požadavku, například
-
tlsCipherstring- Šifra pro připojení ke Cloudflare, například
"AEAD-AES128-GCM-SHA256".
- Šifra pro připojení ke Cloudflare, například
-
tlsClientAuthObject | null- Různé podrobnosti o klientském certifikátu (pro připojení mTLS). Viz Proměnné klientského certifikátu pro další podrobnosti.
-
tlsClientCiphersSha1string- Hash SHA-1 (kódovaný v Base64) cipher suite odeslané klientem během TLS handshake, zakódovaný ve formátu big-endian. Například
"GXSPDLP4G3X+prK73a4wBuOaHRc=".
- Hash SHA-1 (kódovaný v Base64) cipher suite odeslané klientem během TLS handshake, zakódovaný ve formátu big-endian. Například
-
tlsClientExtensionsSha1string- Hash SHA-1 (kódovaný v Base64) rozšíření TLS klienta odeslaných během handshake, zakódovaný ve formátu big-endian. Například
"OWFiM2I5ZDc0YWI0YWYzZmFkMGU0ZjhlYjhiYmVkMjgxNTU5YTU2Mg==".
- Hash SHA-1 (kódovaný v Base64) rozšíření TLS klienta odeslaných během handshake, zakódovaný ve formátu big-endian. Například
-
tlsClientExtensionsSha1Lestring- Hash SHA-1 (kódovaný v Base64) rozšíření TLS klienta odeslaných během handshake, zakódovaný ve formátu little-endian. Například
"7zIpdDU5pvFPPBI2/PCzqbaXnRA=".
- Hash SHA-1 (kódovaný v Base64) rozšíření TLS klienta odeslaných během handshake, zakódovaný ve formátu little-endian. Například
-
tlsClientHelloLengthstring- Délka zprávy client hello odeslané v TLS handshake ↗. Například
"508". Konkrétně délku bytestringu zprávy client hello.
- Délka zprávy client hello odeslané v TLS handshake ↗. Například
-
tlsClientRandomstring- Hodnota 32bajtové náhodné hodnoty poskytnuté klientem v TLS handshake ↗. Viz RFC 8446 ↗ pro další podrobnosti.
-
tlsVersionstring- Verze TLS připojení ke Cloudflare, například
TLSv1.3.
- Verze TLS připojení ke Cloudflare, například
-
citystring | null- Město příchozího požadavku, například
"Austin".
- Město příchozího požadavku, například
-
continentstring | null- Kontinent příchozího požadavku, například
"NA".
- Kontinent příchozího požadavku, například
-
latitudestring | null- Zeměpisná šířka příchozího požadavku, například
"30.27130".
- Zeměpisná šířka příchozího požadavku, například
-
longitudestring | null- Zeměpisná délka příchozího požadavku, například
"-97.74260".
- Zeměpisná délka příchozího požadavku, například
-
postalCodestring | null- PSČ příchozího požadavku, například
"78701".
- PSČ příchozího požadavku, například
-
metroCodestring | null- Metro kód (DMA) příchozího požadavku, například
"635".
- Metro kód (DMA) příchozího požadavku, například
-
regionstring | null- Pokud je znám, ISO 3166-2 ↗ název regionu první úrovně přiřazeného k IP adrese příchozího požadavku, například
"Texas".
- Pokud je znám, ISO 3166-2 ↗ název regionu první úrovně přiřazeného k IP adrese příchozího požadavku, například
-
regionCodestring | null- Pokud je znám, ISO 3166-2 ↗ kód regionu první úrovně přiřazeného k IP adrese příchozího požadavku, například
"TX".
- Pokud je znám, ISO 3166-2 ↗ kód regionu první úrovně přiřazeného k IP adrese příchozího požadavku, například
-
timezonestring- Časové pásmo příchozího požadavku, například
"America/Chicago".
- Časové pásmo příchozího požadavku, například
Metody
Metody instance
Tyto metody jsou k dispozici pouze na instanci Request objekt nebo prostřednictvím jeho prototypu.
-
clone(): Request- Vytvoří kopii
Requestobjekt.
- Vytvoří kopii
-
arrayBuffer(): Promise<ArrayBuffer>- Vrátí Promise, který se vyřeší s
ArrayBuffer↗ reprezentaci těla požadavku.
- Vrátí Promise, který se vyřeší s
-
formData(): Promise<FormData>- Vrátí Promise, který se vyřeší s
FormData↗ reprezentaci těla požadavku.
- Vrátí Promise, který se vyřeší s
-
json(): Promise<Object>- Vrátí Promise, který se vyřeší s reprezentací těla požadavku ve formátu JSON.
-
text(): Promise<string>- Vrátí Promise, který se vyřeší s textovou (řetězcovou) reprezentací těla požadavku.
Request kontext
Při každém volání Workeru příchozím HTTP požadavkem se fetch() handler je volána na vašem Workeru. Request kontext začíná, když fetch() handler zavolán a asynchronní úlohy (například vytvoření dílčího požadavku pomocí fetch() API) lze spustit pouze uvnitř Request kontext:
export default {
async fetch(request, env, ctx) {
// Request context starts here
return new Response('Hello World!');
},
};Při předání promise do fetch události .respondWith()
Pokud do události fetch předáte příslib objektu Response .respondWith() metoda, kontext požadavku je aktivní po celou dobu asynchronních úloh, které běží před vyřešením promise Response. Událost můžete předat asynchronnímu handleru, například:
addEventListener("fetch", event => {
event.respondWith(eventHandler(event))
})
// No request context available here
async function eventHandler(event){
// Request context available here
return new Response("Hello, Workers!")
}Chyby při pokusu o přístup k neaktivnímu Request kontext
Jakýkoli pokus použít API, jako je fetch() nebo přistupovat k Request kontext během spouštění skriptu vyvolá výjimku:
const promise = fetch("https://example.com/") // Error
async function eventHandler(event){..}Tento úryvek kódu vyvolá výjimku při spuštění skriptu a "fetch" posluchač události se nikdy nezaregistruje.
Nastavte Content-Length hlavička
Content-Length hlavička se automaticky nastaví podle toho, jaký je zdroj dat pro Request je. Jakákoli hodnota ručně nastavená kódem uživatele v Headers bude ignorován. Pokud chcete mít Content-Length hlavičky na konkrétní hodnotu se body Request musí být buď FixedLengthStream nebo hodnotu s pevnou délkou stejně jako řetězec nebo TypedArray.
A FixedLengthStream je identita TransformStream který umožňuje do sebe zapsat jen pevně daný počet bajtů.
const { writable, readable } = new FixedLengthStream(11);
const enc = new TextEncoder();
const writer = writable.getWriter();
writer.write(enc.encode("hello world"));
writer.end();
const req = new Request('https://example.org', { method: 'POST', body: readable });Použití jakéhokoli jiného typu ReadableStream jako tělo požadavku bude mít za následek použití Chunked-Encoding.
Rozdíly
Workers implementace pro Request rozhraní obsahuje několik rozšíření webového standardu Request API. Tyto rozdíly jsou záměrné a poskytují další funkce specifické pro prostředí Workers runtime.
cf vlastnost
Workers přidává cf vlastnost na Request objekt, který obsahuje metadata specifická pro Cloudflare o příchozím požadavku. Tato vlastnost není součástí webového standardu a je dostupná pouze v runtime Workers. Viz IncomingRequestCfProperties s podrobnostmi.
headers vlastnost
headers vlastnost vrátí verzi specifickou pro Workers Headers objekt, který zahrnuje další metody, jako například getAll() pro Set-Cookie hlavičky. Podrobnosti najdete v Dokumentace Headers pro podrobnosti o tom, jak Workers Headers implementace se liší od webového standardu.
Neměnnost
Příchozí Request objekty předané do fetch() handler jsou neměnné. Pokud chcete upravit vlastnosti příchozího požadavku, musíte vytvořit nový Request objekt.
Související zdroje
- Příklady: úprava vlastnosti požadavku
- Příklady: přístup k
cfobjekt - Odkaz:
Response - Napište kód svého Workeru v syntaxe ES modulů pro optimalizovaný zážitek.