AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
# 请求 ### 建设者 #### 句法 ~~~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