# 请求
### 建设者
#### 句法
~~~javascript
new Request(input [, init])
~~~
#### 构造函数参数
* `input`:包含URL的USVString或现有`Request`对象。请注意,该`url`属性是不可变的,因此在[修改请求](https://developers.cloudflare.com/workers/templates/snippets/modify_req_props/)和更改URL时,必须在此参数中传递新的URL。
* `init`(可选):一个选项对象,其中包含要应用于请求的自定义设置。有效选项包括:
* `method`:请求方法,例如`GET`或`POST`
* `headers`:[标题](https://developers.cloudflare.com/workers/reference/apis/fetch#headers)对象
* `body`:要添加到请求中的任何文本。**注意:**使用`GET`或`HEAD`方法的请求不能具有主体。
* `redirect`:提取请求时遵循的模式。**注意:**`fetchEvent`从事件处理程序的传入生成的请求的默认值为`manual`。新构建的请求(即`new Request(url)`)的默认值为`follow`。有效选项:
* `follow`:如果重定向响应返回到提取,则将根据`Location`响应中的标头触发另一个提取,直到返回非重定向代码。(即`await fetch(..)`永远不会返回`301`重定向)
* `manual`:重定向响应将从获取中返回
### Properties 属性
传入`Request`对象(即`event.request`)的所有属性均为只读。要[修改请求](https://developers.cloudflare.com/workers/templates/snippets/modify_req_props/),您必须创建一个新`Request`对象,并将要修改的选项传递给它的[构造函数](https://developers.cloudflare.com/workers/reference/apis/request/#Constructor)。
* `body`:一个简单的获取器,可以[`ReadableStream`](https://developers.cloudflare.com/workers/reference/apis/streams)显示其中的内容。
* `bodyUsed`:一个布尔值,它声明是否已在响应中使用主体。
* `cf`:包含Cloudflare提供的数据的对象(请参见`request.cf`下文)。
* `headers`:包含[`Headers`](https://developers.cloudflare.com/workers/reference/apis/fetch#headers)请求的关联对象。
* `method`:与请求相关联的请求方法,例如`GET`或`POST`。
* `redirect`:要使用的重定向模式:`follow`或`manual`。
* `url`:包含请求的网址。
#### 该`cf`对象
除了标准[`Request`](https://developers.cloudflare.com/workers/reference/apis/request)对象的属性之外,您还可以使用一个`request.cf`对象来控制Cloudflare功能的应用方式以及Cloudflare提供的其他自定义信息。
注意:当前,无法在操场上测试cf对象中的设置。
来自传入请求的特殊信息,可帮助您改善应用的逻辑。所有计划都可以访问:
* `asn`:传入请求的ASN。(例如`395747`)
* `colo`:请求命中的数据中心的三个字母的机场代码。(例如`"DFW"`)
* `weight:`浏览器要求的HTTP / 2优先级权重。
* `exclusive:`浏览器请求的HTTP / 2独占标志(对于基于Chromium的浏览器为1,对于其他浏览器为0)。
* `group:`请求组的HTTP / 2流ID(对于Firefox,仅非零)。
* `group-weight`:请求组的HTTP / 2权重(对于Firefox,仅非零)。
* `tlsCipher`:连接到Cloudflare的密码。(例如`"AEAD-AES128-GCM-SHA256"`)
* `country`:传入请求的国家/地区。请求中的两个字母的国家/地区代码。该值与`CF-IPCountry`标题中提供的值相同。(例如`"US"`)
* `tlsClientAuth`:仅在使用Cloudflare Access时设置。具有以下属性对象:`certIssuerDNLegacy`,`certIssuerDN`,`certIssuerDNRFC2253`,`certSubjectDNLegacy`,`certVerified`,`certNotAfter`,`certSubjectDN`,`certFingerprintSHA1`,`certNotBefore`,`certSerial`,`certPresented`,`certSubjectDNRFC2253`
* `tlsVersion`:与Cloudflare的连接的TLS版本(例如`TLSv1.3`)
**业务和企业**脚本可以访问:
* `requestPriority`:请求对象中浏览器请求的优先级信息。(例如`“weight=192;exclusive=0;group=3;group-weight=127”`)
* `city`:传入请求的城市。(例如`"Austin"`)
* `continent`:传入请求的大陆。(例如`"NA"`)
* `httpProtocol`:HTTP协议(例如`"HTTP/2"`)
* `latitude`:传入请求的纬度。(例如`"30.27130"`)
* `longitude`:传入请求的经度。(例如`"-97.74260"`)
* `postalCode`:传入请求的邮递区号。(例如`"78701"`)
* `region`:如果知道,则是与传入请求的IP地址相关联的第一级区域的[ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)名称。如果未知,则为空字符串。(例如`"Texas"`)
* `regionCode`:如果知道,则是与传入请求的IP地址相关联的第一级区域的[ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)代码。1如果未知,则为空字符串。(例如`"TX"`)
* `timezone`:传入请求的时区。(例如`"America/Chicago"`)
所有计划都可以针对出站请求设置Cloudflare功能:
* `cacheEverything`:此选项强制Cloudflare缓存此请求的响应,无论在响应上看到什么标头。这等效于设置页面规则[“缓存级别”(以“缓存所有内容”)](https://support.cloudflare.com/hc/en-us/articles/200172266)。(例如`true`)
* `scrapeShield`:切换[ScrapeShield](https://blog.cloudflare.com/introducing-scrapeshield-discover-defend-dete/)。(例如`false`)
* `polish`:设置[波兰](https://blog.cloudflare.com/introducing-polish-automatic-image-optimizati/)模式。可能的值为“有损”,“无损”或“关闭”。(例如`lossless`)
* `minify`:启用或禁用各种文件类型的[AutoMinify](https://www.cloudflare.com/website-optimization/)。的值是包含布尔字段为一个对象`javascript`,`css`和`html`。(例如`{ javascript: true, css: true, html: false }`)
* `mirage`:针对此请求禁用[Mirage](https://www.cloudflare.com/website-optimization/mirage/)。指定此选项时,该值应始终为`false`。(例如`false`)
* `apps`:针对此请求禁用[Cloudflare应用](https://www.cloudflare.com/apps/)。指定此选项时,该值应始终为`false`。(例如`false)`
* `cacheTtl`:此选项强制Cloudflare缓存此请求的响应,而不管响应上看到了什么标头。这等效于设置两个页面规则:[“边缘缓存TTL”](https://support.cloudflare.com/hc/en-us/articles/200168376-What-does-edge-cache-expire-TTL-mean-)和[“缓存级别”(以“缓存所有内容”)](https://support.cloudflare.com/hc/en-us/articles/200172266)。(例如`300`)
* `resolveOverride`:将请求重定向到备用原始服务器。例如,您可以使用它来实现跨多个源的负载平衡。(例如`us-east.example.com`)
* *注-出于安全原因,`resolveOverride`必须在传入请求的同一Cloudflare区域中代理设置的主机名。否则,该设置将被忽略。允许使用CNAME主机,因此要解析为其他域或仅DNS域下的主机,请先在您自己区域的DNS映射中声明一个CNAME记录到外部主机名,在Cloudflare上设置代理,然后将resolveOverride设置为指向该CNAME记录。*
**仅限企业:**
* `cacheKey`:一个请求的缓存键决定了两个请求是否“相同”以进行缓存。如果一个请求与先前的某个请求具有相同的缓存键,那么我们可以为两个请求提供相同的缓存响应。(例如`'some-key'`)
* `cacheTtlByStatus`:此选项是功能的一个版本,该`cacheTtl`功能根据响应的状态码选择TTL。如果对此请求的响应具有匹配的状态代码,则Cloudflare将在指令时间内缓存,并覆盖源发送的缓存指令。(例如`{ "200-299": 86400, 404: 1, "500-599": 0 }`)
* *注意-Cloudflare仍将遵守[标准缓存级别](https://support.cloudflare.com/hc/en-us/articles/202775670-How-Do-I-Tell-Cloudflare-What-to-Cache-),因此默认情况下,它将覆盖静态文件的缓存行为。如果要缓存非静态资产,则需要使用页面规则设置[“缓存所有内容”](https://support.cloudflare.com/hc/en-us/articles/200172266-What-do-the-custom-caching-options-mean-in-Page-Rules-)的[缓存级别](https://support.cloudflare.com/hc/en-us/articles/200172266-What-do-the-custom-caching-options-mean-in-Page-Rules-)。*
Workers脚本在Cloudflare安全功能之后运行,但在其他所有功能之前运行。因此,Workers脚本不会影响安全功能的操作(因为它们已经完成),但是会影响其他功能,例如Polish或ScrapeShield或Cloudflare缓存响应的方式。
更新`cf`对象类似于[修改请求](https://developers.cloudflare.com/workers/templates/snippets/modify_req_props/)。您可以添加`cf`对象到`Request`通过传递一个自定义的对象[`fetch`](https://developers.cloudflare.com/workers/reference/apis/fetch/)。
~~~javascript
// Disable ScrapeShield for this request.
fetch(event.request, { cf: { scrapeShield: false } })
~~~
注意:cf对象中的无效或命名错误的设置将被静默忽略。请小心测试是否得到所需的行为。
### 方法
* [`Request.clone()`](https://developer.mozilla.org/en-US/docs/Web/API/Request/clone):创建当前`Request`对象的副本。
* `Request`:实现[`Body`](https://developer.mozilla.org/en-US/docs/Web/API/Body)并具有以下方法:
* [`Body.arrayBuffer()`](https://developer.mozilla.org/en-US/docs/Web/API/Body/arrayBuffer):返回一个[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBuffer)以请求主体表示形式解析的promise。
* [`Body.blob()`](https://developer.mozilla.org/en-US/docs/Web/API/Body/blob):返回一个[`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob)以请求主体表示形式解析的promise。
* [`Body.formData()`](https://developer.mozilla.org/en-US/docs/Web/API/Body/formData):返回一个[`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData)以请求主体表示形式解析的promise。
* [`Body.json()`](https://developer.mozilla.org/en-US/docs/Web/API/Body/json):返回一个[`JSON`](https://developer.mozilla.org/en-US/docs/Web/API/JSON)以请求主体表示形式解析的promise。
* [`Body.text()`](https://developer.mozilla.org/en-US/docs/Web/API/Body/text):返回以[`USVString`](https://developer.mozilla.org/en-US/docs/Web/API/USVString)请求正文的(文本)表示形式解析的promise
- 关于本翻译文档
- 快速开始
- 模版库
- 讲解
- Workers页面
- 从0开始
- 从已有页面开始
- 从已有Worder开始
- 工具
- Cli工具 wrangler
- 安装
- 指令
- 配置
- 环境
- Webpack
- 密钥
- KV
- 网站
- Playground
- ServerLess插件
- Terraform
- REST API
- Making Requests
- Scripts
- Bindings
- Routes
- Integrations
- 相关
- 工作原理
- 安全
- 使用缓存
- 价格
- Routes
- Limits
- 提示
- 调试技巧
- 调试header
- FetchEvent生命周期
- 请求上下文
- 请求sign
- 参考
- runtime API
- Web Standards
- fetch
- fetchEvent
- Response
- Request
- KV
- Environment Variables
- Streams
- Encoding
- Web Crypto
- Cache API
- HTMLRewriter
- Workers KV
- Use cases
- Namespaces
