Request
The Request interface represents an HTTP request and is part of the Fetch API.
 Background
The most common way you will encounter a Request object is as a property of an incoming FetchEvent.
You may also want to construct a Request yourself when you need to modify a request object, because a FetchEvent’s request property is immutable.
The fetch() handler invokes the Request constructor. The RequestInit and RequestInitCfProperties types defined below also describe the valid parameters that can be passed to the fetch() handler.
 Constructor
 Parameters
- input- string | Request- Either a string that contains a URL, or an existing Requestobject.
 
- Either a string that contains a URL, or an existing 
- init- RequestInit- Optional options object that contains settings to apply to the Request.
 
- Optional options object that contains settings to apply to the 
RequestInit
- Cloudflare-specific properties that can be set on the Requestthat control how Cloudflare’s global network handles the request.
 
- Cloudflare-specific properties that can be set on the 
- method- string- The HTTP request method. The default is GET.
 
- The HTTP request method. The default is 
- headers- Headers
- body- string | ReadableStream | FormData | URLSearchParams- The request body, if any.
 
- redirect- string- The redirect mode to use: follow,error, ormanual. The default for a newRequestobject isfollow. Note, however, that the incomingRequestproperty of aFetchEventwill have redirect modemanual.
 
- The redirect mode to use: 
RequestInitCfProperties
An object containing Cloudflare-specific properties that can be set on the Request object. For example:
Invalid or incorrectly-named keys in the cf object will be silently ignored. Consider using TypeScript and @cloudflare/workers-types to ensure proper use of the cf object.
- apps- boolean- Whether Cloudflare Apps should be enabled for this request. Defaults to true.
 
- Whether Cloudflare Apps should be enabled for this request. Defaults to 
- cacheEverything- boolean- Treats all content as static and caches all file types beyond the Cloudflare default cached content. Respects cache headers from the origin web server. This is equivalent to setting the Page Rule Cache Level (to Cache Everything). Defaults to false. This option applies toGETandHEADrequest methods only.
 
- Treats all content as static and caches all file types beyond the Cloudflare default cached content. Respects cache headers from the origin web server. This is equivalent to setting the Page Rule Cache Level (to Cache Everything). Defaults to 
- cacheKey- string- A request’s cache key is what determines if two requests are the same for caching purposes. If a request has the same cache key as some previous request, then Cloudflare can serve the same cached response for both.
 
- cacheTags- Array<string>- This option appends additional Cache-Tag headers to the response from the origin server. This allows for purges of cached content based on tags provided by the Worker, without modifications to the origin server. This is performed using the Purge by Tag feature, which is currently only available to Enterprise zones. If this option is used in a non-Enterprise zone, the additional headers will not be appended.
 
- cacheTtl- number- This option forces Cloudflare to cache the response for this request, regardless of what headers are seen on the response. This is equivalent to setting two Page Rules: Edge Cache TTL and Cache Level (to Cache Everything). The value must be zero or a positive number. A value of 0indicates that the cache asset expires immediately. This option applies toGETandHEADrequest methods only.
 
- This option forces Cloudflare to cache the response for this request, regardless of what headers are seen on the response. This is equivalent to setting two Page Rules: Edge Cache TTL and Cache Level (to Cache Everything). The value must be zero or a positive number. A value of 
- cacheTtlByStatus- { [key: string]: number }- This option is a version of the cacheTtlfeature which chooses a TTL based on the response’s status code. If the response to this request has a status code that matches, Cloudflare will cache for the instructed time and override cache instructives sent by the origin. For example:{ "200-299": 86400, "404": 1, "500-599": 0 }. The value can be any integer, including zero and negative integers. A value of0indicates that the cache asset expires immediately. Any negative value instructs Cloudflare not to cache at all. This option applies toGETandHEADrequest methods only.
 
- This option is a version of the 
- image- Object | null- Enables Image Resizing for this request. The possible values are described in Image Resizing with Workers documentation.
 
- minify- { javascript?: boolean; css?: boolean; html?: boolean; }- Enables or disables AutoMinify for various file types. For example: { javascript: true, css: true, html: false }.
 
- Enables or disables AutoMinify for various file types. For example: 
- mirage- boolean- Whether Mirage should be enabled for this request, if otherwise configured for this zone. Defaults to true.
 
- Whether Mirage should be enabled for this request, if otherwise configured for this zone. Defaults to 
- polish- string- Sets Polish mode. The possible values are lossy,losslessoroff.
 
- Sets Polish mode. The possible values are 
- resolveOverride- string- Directs the request to an alternate origin server by overriding the DNS lookup. The value of resolveOverridespecifies an alternate hostname which will be used when determining the origin IP address, instead of using the hostname specified in the URL. TheHostheader of the request will still match what is in the URL. Thus,resolveOverrideallows a request to be sent to a different server than the URL /Hostheader specifies. However,resolveOverridewill only take effect if both the URL host and the host specified byresolveOverrideare within your zone. If either specifies a host from a different zone / domain, then the option will be ignored for security reasons. If you need to direct a request to a host outside your zone (while keeping theHostheader pointing within your zone), first create a CNAME record within your zone pointing to the outside host, and then setresolveOverrideto point at the CNAME record. Note that, for security reasons, it is not possible to set theHostheader to specify a host outside of your zone unless the request is actually being sent to that host.
 
- Directs the request to an alternate origin server by overriding the DNS lookup. The value of 
- scrapeShield- boolean- Whether ScrapeShield should be enabled for this request, if otherwise configured for this zone. Defaults to true.
 
- Whether ScrapeShield should be enabled for this request, if otherwise configured for this zone. Defaults to 
- webp- boolean
 Properties
All properties of an incoming Request object (that is, event.request) are read only. To modify a request, create a new Request object and pass the options to modify to its constructor.
- body- ReadableStream- Stream of the body contents.
 
- bodyUsed- Boolean- Declares whether the body has been used in a response yet.
 
- cf- IncomingRequestCfProperties- An object containing properties about the incoming request provided by Cloudflare’s global network.
 
- headers- Headers
- method- string- Contains the request’s method, for example, GET,POST, etc.
 
- Contains the request’s method, for example, 
- redirect- string- The redirect mode to use: follow,error, ormanual. Thefetchmethod will automatically follow redirects if the redirect mode is set tofollow. If set tomanual, the3xxredirect response will be returned to the caller as-is. The default for a newRequestobject isfollow. Note, however, that the incomingRequestproperty of aFetchEventwill have redirect modemanual.
 
- The redirect mode to use: 
- url- string- Contains the URL of the request.
 
IncomingRequestCfProperties
In addition to the properties on the standard Request object, the request.cf object on an inbound Request contains information about the request provided by Cloudflare’s global network.
All plans have access to:
- asn- Number- ASN of the incoming request, for example, 395747.
 
- ASN of the incoming request, for example, 
- asOrganization- string- The organization which owns the ASN of the incoming request, for example, Google Cloud.
 
- The organization which owns the ASN of the incoming request, for example, 
- botManagement- Object | null- Only set when using Cloudflare Bot Management. Object with the following properties: score,verifiedBot,staticResource,ja3Hash, anddetectionIds. Refer to Bot Management Variables for more details.
 
- Only set when using Cloudflare Bot Management. Object with the following properties: 
- clientAcceptEncoding- string | null- If Cloudflare replaces the value of the Accept-Encodingheader, the original value is stored in theclientAcceptEncodingproperty, for example,"gzip, deflate, br".
 
- If Cloudflare replaces the value of the 
- colo- string- The three-letter IATAairport code of the data center that the request hit, for example,"DFW".
 
- The three-letter 
- country- string | null- Country of the incoming request. The two-letter country code in the request. This is the same value as that provided in the CF-IPCountryheader, for example,"US".
 
- Country of the incoming request. The two-letter country code in the request. This is the same value as that provided in the 
- isEUCountry- string | null- If the country of the incoming request is in the EU, this will return "1". Otherwise, this property will be omitted.
 
- If the country of the incoming request is in the EU, this will return 
- httpProtocol- string- HTTP Protocol, for example, "HTTP/2".
 
- HTTP Protocol, for example, 
- requestPriority- string | null- The browser-requested prioritization information in the request object, for example, "weight=192;exclusive=0;group=3;group-weight=127".
 
- The browser-requested prioritization information in the request object, for example, 
- tlsCipher- string- The cipher for the connection to Cloudflare, for example, "AEAD-AES128-GCM-SHA256".
 
- The cipher for the connection to Cloudflare, for example, 
- tlsClientAuth- Object | null- Only set when using Cloudflare Access or API Shield (mTLS). Object with the following properties: certFingerprintSHA1,certFingerprintSHA256,certIssuerDN,certIssuerDNLegacy,certIssuerDNRFC2253,certIssuerSKI,certIssuerSerial,certNotAfter,certNotBefore,certPresented,certRevoked,certSKI,certSerial,certSubjectDN,certSubjectDNLegacy,certSubjectDNRFC2253,certVerified.
 
- Only set when using Cloudflare Access or API Shield (mTLS). Object with the following properties: 
- tlsVersion- string- The TLS version of the connection to Cloudflare, for example, TLSv1.3.
 
- The TLS version of the connection to Cloudflare, for example, 
- city- string | null- City of the incoming request, for example, "Austin".
 
- City of the incoming request, for example, 
- continent- string | null- Continent of the incoming request, for example, "NA".
 
- Continent of the incoming request, for example, 
- latitude- string | null- Latitude of the incoming request, for example, "30.27130".
 
- Latitude of the incoming request, for example, 
- longitude- string | null- Longitude of the incoming request, for example, "-97.74260".
 
- Longitude of the incoming request, for example, 
- postalCode- string | null- Postal code of the incoming request, for example, "78701".
 
- Postal code of the incoming request, for example, 
- metroCode- string | null- Metro code (DMA) of the incoming request, for example, "635".
 
- Metro code (DMA) of the incoming request, for example, 
- region- string | null- If known, the ISO 3166-2 name for the first level region associated with the IP address of the incoming request, for example, "Texas".
 
- If known, the ISO 3166-2 name for the first level region associated with the IP address of the incoming request, for example, 
- regionCode- string | null- If known, the ISO 3166-2 code for the first-level region associated with the IP address of the incoming request, for example, "TX".
 
- If known, the ISO 3166-2 code for the first-level region associated with the IP address of the incoming request, for example, 
- timezone- string- Timezone of the incoming request, for example, "America/Chicago".
 
- Timezone of the incoming request, for example, 
 Methods
 Instance methods
These methods are only available on an instance of a Request object or through its prototype.
- clone():- Promise<Request>- Creates a copy of the Requestobject.
 
- Creates a copy of the 
- arrayBuffer():- Promise<ArrayBuffer>- Returns a promise that resolves with an ArrayBufferrepresentation of the request body.
 
- Returns a promise that resolves with an 
- formData():- Promise<FormData>- Returns a promise that resolves with a FormDatarepresentation of the request body.
 
- Returns a promise that resolves with a 
- json():- Promise<Object>- Returns a promise that resolves with a JSON representation of the request body.
 
- text():- Promise<string>- Returns a promise that resolves with a string (text) representation of the request body.
 
The Request context
Each time a Worker is invoked by an incoming HTTP request, the fetch() handler is called on your Worker. The Request context starts when the fetch() handler is called, and asynchronous tasks (such as making a subrequest using the fetch() API) can only be run inside the Request context:
When passing a promise to fetch event .respondWith()
If you pass a Response promise to the fetch event .respondWith() method, the request context is active during any asynchronous tasks which run before the Response promise has settled. You can pass the event to an async handler, for example:
Errors when attempting to access an inactive Request context
Any attempt to use APIs such as fetch() or access the Request context during script startup will throw an exception:
This code snippet will throw during script startup, and the "fetch" event listener will never be registered.
Set the Content-Length header
The Content-Length header will be automatically set by the runtime based on whatever the data source for the Request is. Any value manually set by user code in the Headers will be ignored. To have a Content-Length header with a specific value specified, the body of the Request must be either a FixedLengthStream or a fixed-length value just as a string or TypedArray.
A FixedLengthStream is an identity TransformStream that permits only a fixed number of bytes to be written to it.
Using any other type of ReadableStream as the body of a request will result in Chunked-Encoding being used.