<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cloudflare changelogs</title><description>Updates to various Cloudflare products</description><link>https://cloudflaredoc.ubitools.com/changelog/</link><item><title>Agents - Agents SDK 包支持 AI SDK v6 和 v7</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-23-ai-sdk-v6-v7-support/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-23-ai-sdk-v6-v7-support/</guid><description>
&lt;p&gt;&lt;code&gt;agents&lt;/code&gt;、&lt;code&gt;@cloudflare/ai-chat&lt;/code&gt;、&lt;code&gt;@cloudflare/codemode&lt;/code&gt; 和 &lt;code&gt;@cloudflare/think&lt;/code&gt; 包现在支持 AI SDK v6 和 v7。现有应用程序在更新这些包时可以保留在 v6 版本。应用程序也可以采用 v7，而无需更改它们使用的 Cloudflare Agents API。&lt;/p&gt;
&lt;p&gt;支持的同级依赖范围是 &lt;code&gt;ai@^6 || ^7&lt;/code&gt; 和 &lt;code&gt;@ai-sdk/react@^3 || ^4&lt;/code&gt;。请使用相匹配的主版本：将 AI SDK v6 与 &lt;code&gt;@ai-sdk/react&lt;/code&gt; v3 配对，或将 AI SDK v7 与 &lt;code&gt;@ai-sdk/react&lt;/code&gt; v4 配对。&lt;/p&gt;
&lt;p&gt;要安装包含 AI SDK v7 的最新包：&lt;/p&gt;
&lt;script&gt;
	if (!customElements.get(&quot;nb-pm-restore&quot;)) {
		customElements.define(
			&quot;nb-pm-restore&quot;,
			class extends HTMLElement {
				connectedCallback() {
					const card = this.closest(&quot;[data-nb-pm]&quot;);
					if (!card) return;
					let saved;
					try {
						saved = sessionStorage.getItem(&quot;ui-pm-tab&quot;);
					} catch {
						return;
					}
					if (!saved) return;
					const tabs = card.querySelectorAll(&quot;[data-nb-pm-tab]&quot;);
					let idx = -1;
					tabs.forEach(function (t, i) {
						if (t.textContent.trim() === saved) idx = i;
					});
					if (idx &lt; 1) return;
					tabs.forEach(function (t, i) {
						t.setAttribute(&quot;aria-selected&quot;, String(i === idx));
					});
					card.querySelectorAll(&quot;[data-nb-pm-panel]&quot;).forEach(function (p, i) {
						p.hidden = i !== idx;
					});
				}
			},
		);
	}
&lt;/script&gt;&lt;div data-nb-pm class=&quot;w-full&quot;&gt;&lt;div class=&quot;flex w-full flex-col overflow-hidden rounded-lg text-sm ring ring-border bg-card&quot;&gt;&lt;div class=&quot;flex items-center gap-2 px-3 py-2 text-[0.8125rem] font-medium leading-5 text-muted-foreground bg-[var(--nb-surface-sunken)]&quot; role=&quot;tablist&quot; aria-label=&quot;Package manager&quot;&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;true&quot; aria-controls=&quot;pm-panel-pm-81722657-5801-46ae-bb23-43781e800802-npm&quot; id=&quot;pm-tab-pm-81722657-5801-46ae-bb23-43781e800802-npm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;npm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-81722657-5801-46ae-bb23-43781e800802-yarn&quot; id=&quot;pm-tab-pm-81722657-5801-46ae-bb23-43781e800802-yarn&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;yarn&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-81722657-5801-46ae-bb23-43781e800802-pnpm&quot; id=&quot;pm-tab-pm-81722657-5801-46ae-bb23-43781e800802-pnpm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;pnpm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-81722657-5801-46ae-bb23-43781e800802-bun&quot; id=&quot;pm-tab-pm-81722657-5801-46ae-bb23-43781e800802-bun&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;bun&lt;/button&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-81722657-5801-46ae-bb23-43781e800802-npm&quot; aria-labelledby=&quot;pm-tab-pm-81722657-5801-46ae-bb23-43781e800802-npm&quot; data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; i agents@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/think@latest ai@^7 @ai-sdk/react@^4&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;npm i agents@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/think@latest ai@^7 @ai-sdk/react@^4&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;symbol id=&quot;ai:ph:copy&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;symbol id=&quot;ai:ph:check&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-81722657-5801-46ae-bb23-43781e800802-yarn&quot; aria-labelledby=&quot;pm-tab-pm-81722657-5801-46ae-bb23-43781e800802-yarn&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/think@latest ai@^7 @ai-sdk/react@^4&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;yarn add agents@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/think@latest ai@^7 @ai-sdk/react@^4&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-81722657-5801-46ae-bb23-43781e800802-pnpm&quot; aria-labelledby=&quot;pm-tab-pm-81722657-5801-46ae-bb23-43781e800802-pnpm&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;pnpm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/think@latest ai@^7 @ai-sdk/react@^4&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;pnpm add agents@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/think@latest ai@^7 @ai-sdk/react@^4&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-81722657-5801-46ae-bb23-43781e800802-bun&quot; aria-labelledby=&quot;pm-tab-pm-81722657-5801-46ae-bb23-43781e800802-bun&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;bun&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/think@latest ai@^7 @ai-sdk/react@^4&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;bun add agents@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/think@latest ai@^7 @ai-sdk/react@^4&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;nb-pm-restore style=&quot;display:contents&quot;&gt;&lt;/nb-pm-restore&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/package-managers/PackageManagers.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;Think 会规范化两个 AI SDK 版本的流式传输、工具完成事件和遥测数据。现有的 v6 应用程序在更新 Think 之前无需迁移这些集成。&lt;/p&gt;
&lt;p&gt;有关设置和使用的详细信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/harnesses/think/&quot;&gt;Think 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category></item><item><title>Agents, Workers - Agents SDK 减少了 MCP Schema 转换，为 Think 中的 MCP 添加了暴露控制，并且 Code Mode SDK 添加了直接的主机 API</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-22-mcp-codemode-updates/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-22-mcp-codemode-updates/</guid><description>
&lt;p&gt;此版本减少了重复的 MCP schema 转换，并为 Think 的自动 MCP 工具暴露添加了选择停用（opt-out）机制。它还允许非 AI-SDK 主机直接调用持久的 Code Mode 运行时。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;控制-think-中直接的-mcp-工具暴露&quot;&gt;控制 Think 中直接的 MCP 工具暴露&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#控制-think-中直接的-mcp-工具暴露&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;现在，当实时连接保持相同的工具目录时，Agents SDK MCP 客户端会重用已转换的输入和输出 schema。这避免了在每个模型轮次中再次将每个 MCP JSON Schema 转换为 Zod。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@cloudflare/think&lt;/code&gt; 还添加了 &lt;code&gt;includeMcpTools&lt;/code&gt;。当您通过 Code Mode 或 Think 自动工具集之外的其他机制暴露 MCP 工具时，可将其设置为 &lt;code&gt;false&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; MyAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	includeMcpTools&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	waitForMcpConnections&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; MyAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	includeMcpTools&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; false&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	waitForMcpConnections&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;此设置将跳过 Think 的自动 &lt;code&gt;getAITools()&lt;/code&gt; 调用。MCP 注册、恢复、发现、原始目录访问、直接调用和 Code Mode 连接器仍然正常工作。&lt;/p&gt;
&lt;p&gt;当您只需要原始 MCP 目录时，请使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/model-context-protocol/apis/client-api/#thismcplisttools&quot;&gt;&lt;code&gt;listTools()&lt;/code&gt;&lt;/a&gt;。对于连接器设置，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/tools/codemode/mcp/&quot;&gt;在 Code Mode 中使用 MCP 工具&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;无需-ai-sdk-即可调用-code-mode-运行时&quot;&gt;无需 AI SDK 即可调用 Code Mode 运行时&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#无需-ai-sdk-即可调用-code-mode-运行时&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;@cloudflare/codemode@latest&lt;/code&gt; 在持久的运行时句柄中添加了 &lt;code&gt;execute()&lt;/code&gt;、&lt;code&gt;search()&lt;/code&gt; 和 &lt;code&gt;describe()&lt;/code&gt;。MCP 服务器和其他主机现在可以执行代码并发现连接器方法，而无需将运行时适配到 AI SDK 工具。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; matches&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; runtime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;create issue&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; docs&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; runtime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(matches.results[&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;].path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; outcome&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; runtime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;execute&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	code: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;`async () =&gt; github.create_issue({ title: &quot;Bug&quot; })`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; matches&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; runtime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;create issue&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; docs&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; runtime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(matches.results[&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;].path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; outcome&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; runtime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;execute&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	code: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;`async () =&amp;gt; github.create_issue({ title: &quot;Bug&quot; })`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;搜索和描述结果为受保护的连接器方法包含 &lt;code&gt;requiresApproval: true&lt;/code&gt;。使用现有的 &lt;code&gt;approve()&lt;/code&gt; 和 &lt;code&gt;reject()&lt;/code&gt; 方法可以恢复处于暂停状态的执行。&lt;/p&gt;
&lt;p&gt;有关设置和确切的方法类型，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/tools/codemode/durable-runtime/&quot;&gt;创建持久 Code Mode 运行时&lt;/a&gt;和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/tools/codemode/api-reference/&quot;&gt;Code Mode API 参考&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;升级&quot;&gt;升级&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#升级&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;script&gt;
	if (!customElements.get(&quot;nb-pm-restore&quot;)) {
		customElements.define(
			&quot;nb-pm-restore&quot;,
			class extends HTMLElement {
				connectedCallback() {
					const card = this.closest(&quot;[data-nb-pm]&quot;);
					if (!card) return;
					let saved;
					try {
						saved = sessionStorage.getItem(&quot;ui-pm-tab&quot;);
					} catch {
						return;
					}
					if (!saved) return;
					const tabs = card.querySelectorAll(&quot;[data-nb-pm-tab]&quot;);
					let idx = -1;
					tabs.forEach(function (t, i) {
						if (t.textContent.trim() === saved) idx = i;
					});
					if (idx &lt; 1) return;
					tabs.forEach(function (t, i) {
						t.setAttribute(&quot;aria-selected&quot;, String(i === idx));
					});
					card.querySelectorAll(&quot;[data-nb-pm-panel]&quot;).forEach(function (p, i) {
						p.hidden = i !== idx;
					});
				}
			},
		);
	}
&lt;/script&gt;&lt;div data-nb-pm class=&quot;w-full&quot;&gt;&lt;div class=&quot;flex w-full flex-col overflow-hidden rounded-lg text-sm ring ring-border bg-card&quot;&gt;&lt;div class=&quot;flex items-center gap-2 px-3 py-2 text-[0.8125rem] font-medium leading-5 text-muted-foreground bg-[var(--nb-surface-sunken)]&quot; role=&quot;tablist&quot; aria-label=&quot;Package manager&quot;&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;true&quot; aria-controls=&quot;pm-panel-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-npm&quot; id=&quot;pm-tab-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-npm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;npm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-yarn&quot; id=&quot;pm-tab-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-yarn&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;yarn&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-pnpm&quot; id=&quot;pm-tab-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-pnpm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;pnpm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-bun&quot; id=&quot;pm-tab-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-bun&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;bun&lt;/button&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-npm&quot; aria-labelledby=&quot;pm-tab-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-npm&quot; data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; i agents@latest @cloudflare/think@latest @cloudflare/codemode@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;npm i agents@latest @cloudflare/think@latest @cloudflare/codemode@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;symbol id=&quot;ai:ph:copy&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;symbol id=&quot;ai:ph:check&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-yarn&quot; aria-labelledby=&quot;pm-tab-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-yarn&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;yarn add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-pnpm&quot; aria-labelledby=&quot;pm-tab-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-pnpm&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;pnpm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;pnpm add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-bun&quot; aria-labelledby=&quot;pm-tab-pm-0b06eba7-a6ae-4106-baa9-66461825fa5b-bun&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;bun&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;bun add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;nb-pm-restore style=&quot;display:contents&quot;&gt;&lt;/nb-pm-restore&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/package-managers/PackageManagers.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Windows (version 2026.6.880.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-warp-windows-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This hotfix resolves a regression that caused a large increase in DNS-over-TCP queries to fallback and internal DNS servers. The client now sends fallback DNS queries over UDP first, falling back to TCP only when a response is truncated, instead of querying both protocols in parallel.&lt;/p&gt;
</description><pubDate>Tue, 21 Jul 2026 16:55:55 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for macOS (version 2026.6.880.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-warp-macos-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This hotfix resolves a regression that caused a large increase in DNS-over-TCP queries to fallback and internal DNS servers. The client now sends fallback DNS queries over UDP first, falling back to TCP only when a response is truncated, instead of querying both protocols in parallel.&lt;/p&gt;
</description><pubDate>Tue, 21 Jul 2026 16:55:55 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Linux (version 2026.6.880.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-warp-linux-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This hotfix resolves a regression that caused a large increase in DNS-over-TCP queries to fallback and internal DNS servers. The client now sends fallback DNS queries over UDP first, falling back to TCP only when a response is truncated, instead of querying both protocols in parallel.&lt;/p&gt;
</description><pubDate>Tue, 21 Jul 2026 16:50:41 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare Fundamentals - 账户角色 API 已弃用</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-account-role-api-deprecated/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-account-role-api-deprecated/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/accounts/subresources/roles/&quot;&gt;账户角色 API (Account Roles API)&lt;/a&gt; 已弃用，并且正在被&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/iam/subresources/permission_groups/&quot;&gt;权限组 API (Permission Groups API)&lt;/a&gt; 取代。目前尚未确定生命周期结束日期。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;您需要执行的操作&quot;&gt;您需要执行的操作&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#您需要执行的操作&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;查看&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/iam/subresources/permission_groups/&quot;&gt;权限组 API&lt;/a&gt; 文档；响应模式与旧版角色 (Roles) 响应不同。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;亮点&quot;&gt;亮点&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#亮点&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;迁移到权限组 API 的集成必须从该 API 获取权限组 ID，并在账户成员 API (Account Members API) 策略请求结构中使用它们。保留旧版角色 ID 的集成需要重新映射其分配。&lt;/li&gt;
&lt;li&gt;旧版 &lt;code&gt;Role&lt;/code&gt; 响应包含顶级 &lt;code&gt;description&lt;/code&gt; 以及由资源类型键控并带有 edit/read 标志的 &lt;code&gt;permissions&lt;/code&gt; 对象。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PermissionGroup&lt;/code&gt; 响应将这些替换为包含 &lt;code&gt;label&lt;/code&gt; 和 &lt;code&gt;scopes&lt;/code&gt; 的 &lt;code&gt;meta&lt;/code&gt; 对象。各个权限不作为权限组的一部分返回。&lt;/li&gt;
&lt;li&gt;新的 API 支持 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/api/get-started/create-token/&quot;&gt;API Token&lt;/a&gt; 授权方案。提供旧版 Email + API Key 授权方案以实现向后兼容。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/api/reference/deprecations/&quot;&gt;API 已弃用项目&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Sandbox SDK - 使用 Devin Outposts 在 Cloudflare 上运行 Devin</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-devin-outposts/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-devin-outposts/</guid><description>&lt;p&gt;&lt;a href=&quot;https://docs.devin.ai/onboard-devin/outposts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Devin Outposts&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 允许您在 Cloudflare 上运行 Devin Agent。每个 Devin 会话在由 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/&quot;&gt;Cloudflare Containers&lt;/a&gt; 支持的独立沙箱中运行，因此 Agent 可以在隔离环境中执行代码并使用开发工具。&lt;/p&gt;
&lt;p&gt;当您希望 Devin 会话在 Cloudflare 托管的基础设施上运行，且每个会话相互隔离时，请使用 Devin Outposts。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/devin-outposts.B3xjmfR5_Z1DS1oR.webp&quot; alt=&quot;Devin 界面显示已选择 Cloudflare 作为 Outposts 虚拟环境&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1712&quot; height=&quot;914&quot;&gt;
&lt;p&gt;如需快速入门，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/tutorials/devin-outposts/&quot;&gt;使用 Devin Outposts 在 Cloudflare 上运行 Devin&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><product>Sandbox SDK</product><category>Sandbox SDK</category></item><item><title>WAF - WAF 发布 - 2026-07-21</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-21-waf-release/</guid><description>
&lt;p&gt;此版本引入了针对 Adobe ColdFusion、Next.js、WordPress 中漏洞的新规则，并更新了现有规则，从而针对服务端请求伪造 (SSRF)、本地文件包含 (LFI) 和跨站脚本 (XSS) 提供了增强的通用防护。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;针对 Next.js 漏洞的 WAF 和框架适配器缓解措施&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Next.js 团队在 2026 年 7 月的安全版本中披露并修复了多个&lt;a href=&quot;https://nextjs.org/blog/july-2026-security-release&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;安全漏洞&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。这些漏洞包括各种严重程度的拒绝服务、中间件和代理绕过、服务端请求伪造、信息泄露和缓存污染。&lt;/p&gt;
&lt;p&gt;披露的几个漏洞无法在 WAF 层进行阻断，我们强烈建议您立即更新应用程序及其依赖项。已修补的版本可通过 v16.2.11 (Active LTS) 和 v15.5.21 (Maintenance LTS) 获取，以解决这些问题。&lt;/p&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;公告&lt;/th&gt;&lt;th&gt;CVE&lt;/th&gt;&lt;th&gt;严重程度&lt;/th&gt;&lt;th&gt;问题&lt;/th&gt;&lt;th&gt;WAF 覆盖范围&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vercel/next.js/security/advisories/GHSA-m99w-x7hq-7vfj&quot;&gt;App Router 中使用 Server Actions 的拒绝服务&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CVE-2026-64641&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;td&gt;&lt;p&gt;针对至少使用了一个 Server Action 的 App Router 的 Next.js 应用程序的精心设计的请求可能会导致 CPU 使用率过高。该 CPU 使用率会阻止在同一进程中处理进一步的请求，从而导致拒绝服务。&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;已部署 WAF 规则 Next.js - DoS - CVE-2026-64641（&lt;rule-id id=&quot;b013b67c357547b4b866234390dcdb0a&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...90dcdb0a&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;）以提供覆盖。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vercel/next.js/security/advisories/GHSA-6gpp-xcg3-4w24&quot;&gt;使用 Turbopack 和单语言环境的 App Router 应用程序中的中间件 / 代理绕过&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CVE-2026-64642&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;td&gt;&lt;p&gt;使用 App Router 并通过 Turbopack 构建，且在 config.i18n.locales 中包含单个条目的 Next.js 应用程序容易受到中间件/代理绕过的影响。因此，中间件/代理可能执行的任何身份验证或安全检查都将被绕过。&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是一个中间件绕过，遗憾的是无法通过 Cloudflare WAF 签名引擎进行覆盖。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vercel/next.js/security/advisories/GHSA-p9j2-gv94-2wf4&quot;&gt;重写中由于攻击者控制的目标主机名导致的服务端请求伪造&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CVE-2026-64645&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;td&gt;&lt;p&gt;从请求控制的输入中构建其外部目标主机名的 rewrites() 或 redirects() 规则可以指向任意主机名，而不管规则的主机名后缀如何。对于重写，这种行为会启用服务端请求伪造 (SSRF)；对于重定向，可以实现开放重定向。&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;现有的 SSRF 规则为该漏洞提供了足够的覆盖，因此未开发量身定制的 WAF 规则。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vercel/next.js/security/advisories/GHSA-89xv-2m56-2m9x&quot;&gt;自定义服务器上 Server Actions 中的服务端请求伪造&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CVE-2026-64649&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;td&gt;&lt;p&gt;当 Server Action 转发或重定向请求时，攻击者可能会导致服务器将该出站请求发送到恶意主机（服务端请求伪造）。这需要攻击者的请求能够控制与 Host 相关的标头。&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;已部署 WAF 规则 Next.js - SSRF - CVE-2026-64649（&lt;rule-id id=&quot;7fe6d6f3df774ae2a0011f20930091a3&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...930091a3&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;）以提供覆盖。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vercel/next.js/security/advisories/GHSA-q8wf-6r8g-63ch&quot;&gt;使用 SVG 的图像优化 API 中的拒绝服务&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CVE-2026-64644&lt;/td&gt;&lt;td&gt;中&lt;/td&gt;&lt;td&gt;&lt;p&gt;在使用默认图像加载器自行托管 Next.js 时，如果进行了配置（默认情况下不启用），图像优化 API 可以优化远程托管的图像。如果这些图像包含恶意内容，这些图像可能会导致 /_next/image 端点中的 CPU 耗尽。&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;遗憾的是，恶意请求与合法的图像优化请求无法区分，因此没有创建 WAF 规则来解决该漏洞。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vercel/next.js/security/advisories/GHSA-4c39-4ccg-62r3&quot;&gt;Edge 运行时中无限制的 Server Action 有效负载&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CVE-2026-64646&lt;/td&gt;&lt;td&gt;中&lt;/td&gt;&lt;td&gt;&lt;p&gt;精心设计的请求可能会导致 Edge 运行时中 Server Actions 的内存消耗。使用 App Router 并且具有至少一个 Server Action 的 Next.js 应用程序将受到影响。&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;遗憾的是，没有一个万能的规则可以通过 WAF 部署来代替自定义的 bodySizeLimit 配置，因此没有创建 WAF 规则来解决此漏洞。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vercel/next.js/security/advisories/GHSA-955p-x3mx-jcvp&quot;&gt;内部服务器函数端点的未经身份验证的泄露&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CVE-2026-64643&lt;/td&gt;&lt;td&gt;中&lt;/td&gt;&lt;td&gt;&lt;p&gt;在使用 App Router 的 Next.js 应用程序中，Server Actions（use server）或 use cache 端点 ID 可能会被全局泄露。攻击者可以利用这一点进行侦察，并将其作为更广泛攻击链的一部分。&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;已部署 WAF 规则 Next.js - Information Disclosure - CVE-2026-64643（&lt;rule-id id=&quot;6c4135d4d9d745e4866ad83672952826&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...72952826&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;）以提供覆盖。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vercel/next.js/security/advisories/GHSA-68g3-v927-f742&quot;&gt;带有请求体的请求在响应体方面的缓存混淆&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CVE-2026-64648&lt;/td&gt;&lt;td&gt;中&lt;/td&gt;&lt;td&gt;&lt;p&gt;带有请求体的服务端 fetch 可能会从针对相同 URL 但请求体不同的不同请求返回缓存的响应体。这仅适用于形状为 fetch(new Request(init), aDifferentInit) 的 fetch 调用。&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是一个应用逻辑 bug，遗憾的是无法通过 Cloudflare WAF 签名引擎进行覆盖。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/vercel/next.js/security/advisories/GHSA-4633-3j49-mh5q&quot;&gt;包含无效 UTF-8 字节序列的请求体的请求在响应体方面的缓存混淆&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CVE-2026-64647&lt;/td&gt;&lt;td&gt;中&lt;/td&gt;&lt;td&gt;&lt;p&gt;带有请求体的服务端 fetch 可能会从针对相同 URL 但请求体不同的不同请求返回缓存的响应体。这仅在接收包含无效 UTF-8 字符的请求体时适用。&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是一个应用逻辑 bug，遗憾的是无法通过 Cloudflare WAF 签名引擎进行覆盖。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2026-48276: Adobe ColdFusion 文件上传机制中的路径遍历漏洞允许未经身份验证的攻击者将文件写入或上传到源服务器上指定目录之外的任意位置。&lt;/li&gt;
&lt;li&gt;CVE-2026-48282: Adobe ColdFusion 中的路径遍历漏洞使未经身份验证的攻击者能够操纵目录序列并访问主机文件系统上的受限系统文件。&lt;/li&gt;
&lt;li&gt;CVE-2026-60137: 影响 WordPress 的未经身份验证的 SQL 注入漏洞。威胁活动者利用未清理的输入参数执行任意 SQL 查询，从而导致未经授权的数据库访问、记录操作或数据外泄。&lt;/li&gt;
&lt;li&gt;CVE-2026-63030: 影响 WordPress 核心和插件组件的远程代码执行漏洞。远程、未经身份验证的攻击者可以执行任意 system 命令，以获得未经授权的访问或在主机服务器上建立后门。&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;7fbdc9407bdb4a4eae2b3d91215e7d31&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...215e7d31&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;SSRF - Restricted Protocol&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;6ca512d240d848d6a0c7ef42a935ee5d&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...a935ee5d&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;SSRF - Obfuscated Host&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;a3fb0870c38440d8a9a0eba81b0230ac&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...1b0230ac&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;LFI - Path Traversal&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;452a04be3f73458c863d8dae61349c8b&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...61349c8b&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Adobe ColdFusion - File Upload Path Traversal - CVE:CVE-2026-48276&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;a53a3fb491c64d74908081ee9cb61eac&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...9cb61eac&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Adobe ColdFusion - Path Traversal - CVE:CVE-2026-48282&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;d8b63828c2344d919b94d2594ac5e21f&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...4ac5e21f&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;XSS — JS Bracket Concat Obfuscation - Body&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;264a83a764be428ca41d516ff31f5559&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...f31f5559&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;XSS — JS Bracket Concat Obfuscation - Headers&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;4ba21a60837244029183b782987984fd&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...987984fd&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;XSS — JS Bracket Concat Obfuscation - URI&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;1c060d3a371549219ee290d7ed933fcc&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...ed933fcc&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Wordpress - SQL Injection - CVE:CVE-2026-60137&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;此前被标记为 Generic Rules - SQLi。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;7dfb2bd4708d4b88b9911dc0550664b6&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...550664b6&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Wordpress - Remote Code Execution - CVE:CVE-2026-63030&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;此前被标记为 Generic Rules - Unauthenticated RCE。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 免费规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;db003b39b7774859a8d588ce33697a1a&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...33697a1a&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Wordpress - SQL Injection - CVE:CVE-2026-60137&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;此前被标记为 Generic Rules - SQLi。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 免费规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;ebd3f2df15c74ddcbf6220c9b5ec246a&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...b5ec246a&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Wordpress - Remote Code Execution - CVE:CVE-2026-63030&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;此前被标记为 Generic Rules - Unauthenticated RCE。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;6c4135d4d9d745e4866ad83672952826&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...72952826&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Next.js - Information Disclosure - CVE-2026-64643&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;此前被标记为 Generic Rules - Information Disclosure。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;7fe6d6f3df774ae2a0011f20930091a3&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...930091a3&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Next.js - SSRF - CVE-2026-64649&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;此前被标记为 Generic Rules - Auth Bypass - 2。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;c4ca56c0a6a348299d5a93e663167195&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...63167195&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Next.js - Remote Code Execution - Cache Components&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;此前被标记为 Generic Rules - RCE。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;b013b67c357547b4b866234390dcdb0a&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...90dcdb0a&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Next.js - DoS - CVE-2026-64641&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;此前被标记为 Generic Rules - DoS。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;aa21c9b8b97743bfb217748b2049a60c&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...2049a60c&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - Body - Beta&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt; - &lt;/td&gt;&lt;td&gt;&lt;p&gt;此检测已被移除。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;e7ee67e824844754b513cdf3836855a4&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...836855a4&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - Header - Beta&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt; - &lt;/td&gt;&lt;td&gt;&lt;p&gt;此检测已被移除。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;5f2a6681a2b94442b23816286d060a0d&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...6d060a0d&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - URI - Beta&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt; - &lt;/td&gt;&lt;td&gt;&lt;p&gt;此检测已被移除。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF 发布 - 2026-07-27 的计划变更</title><link>https://cloudflaredoc.ubitools.com/changelog/post/scheduled-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/scheduled-waf-release/</guid><description>&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;公告日期&lt;/th&gt;&lt;th&gt;发布日期&lt;/th&gt;&lt;th&gt;发布行为&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2026-07-21&lt;/td&gt;&lt;td&gt;2026-07-27&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;54e1733b10da4a599e06c6fbc2e84e2d&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...c2e84e2d&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;SSRF - Cloud - Beta&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是一个改进的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-07-21&lt;/td&gt;&lt;td&gt;2026-07-27&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;95a84ab1645a49c685648c17761e7a4c&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...761e7a4c&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;Command Injection - Obfuscation&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-07-23&lt;/td&gt;&lt;td&gt;2026-07-27&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;58df9693db4d454a8764fcda7347c892&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...7347c892&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;Alibaba Fastjson JSONType Remote Code Execution - Body&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Access - 针对明文 HTTP 私有应用程序的基于浏览器的登录</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-20-http-private-apps-l7-auth/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-20-http-private-apps-l7-auth/</guid><description>&lt;p&gt;Cloudflare Access 现在对通过端口 &lt;code&gt;80&lt;/code&gt; 上的明文 HTTP 提供服务的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app/&quot;&gt;私有应用程序&lt;/a&gt;使用标准的基于浏览器的登录流程。&lt;/p&gt;
&lt;p&gt;以前，明文 HTTP 私有应用程序会回退到与 SSH、RDP 和其他非 HTTP 协议相同的会话流程：用户会从 Cloudflare One Client 收到一个“需要身份验证（Authentication required）”弹窗，然后必须选择该通知以打开浏览器并登录。现在，访问 HTTP 私有应用程序的用户会直接在浏览器中看到 Access 登录页面，并在成功后收到标准的 Access &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/application-token/&quot;&gt;应用程序令牌（application token）&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这使得 HTTP 体验与 HTTPS 应用程序（开启了 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/http-policies/tls-decryption/&quot;&gt;Gateway TLS 解密&lt;/a&gt;）保持一致。无需更改配置。仍然需要 Cloudflare One Client 将流量路由到私有网络，但它不再管理 HTTP 应用程序的 Access 会话。&lt;/p&gt;
&lt;p&gt;其他非 HTTP 协议（SSH、RDP、任意 TCP/UDP）继续使用 Cloudflare One Client 通知流程。&lt;/p&gt;</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Billing, Workers - 预算提醒现在默认为按需付费账户开启</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-15-budget-alerts-default-on/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-15-budget-alerts-default-on/</guid><description>&lt;p&gt;我们正在为符合条件的按需付费账户默认开启预算提醒。如果您的账户尚未设置预算提醒，Cloudflare 将为您创建一个账户级别阈值为 $10 的提醒。您的默认提醒将在下一个计费周期开始时启用，因此不会基于您已产生的使用量触发。&lt;/p&gt;
&lt;p&gt;我们将在未来几周内分批推出，因此符合条件的账户可能会在不同时间看到其默认提醒出现。&lt;/p&gt;
&lt;p&gt;默认提醒的行为与您自行创建的提醒完全相同。当您本计费周期的累计基于使用量的支出达到阈值时，您将收到一封电子邮件通知。该提醒仅供参考，不会限制您的使用量，也不会对您的账户产生任何影响。&lt;/p&gt;
&lt;p&gt;使用量每天处理一次，计算前一天的活动，因此预算提醒会在达到阈值后的次日触发，而非实时触发。&lt;/p&gt;
&lt;p&gt;预算提醒仅考虑基于使用量的产品支出。定期订阅费用（例如 Workers Paid 计划费用或其他月度计划费用）不包含在阈值计算中。&lt;/p&gt;
&lt;p&gt;您可以从 &lt;strong&gt;Manage Account（管理账户）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Billing（计费）&lt;/strong&gt; &amp;gt; **Billable Usage（计费使用量）**或通知设置中更改阈值、添加其他提醒或完全移除默认提醒。如果您已配置自己的预算提醒，则不会有任何变化。&lt;/p&gt;
&lt;p&gt;企业合约账户不在此范围内。&lt;/p&gt;
&lt;p&gt;如需更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/billing/manage/budget-alerts/&quot;&gt;预算提醒文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><product>Billing</product><category>Billing</category><category>Workers</category></item><item><title>Durable Objects, Workers - 查看 Durable Object 命名空间的总 SQLite 存储指标</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-20-durable-objects-total-storage-metrics/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-20-durable-objects-total-storage-metrics/</guid><description>
&lt;p&gt;现在，您可以在 Cloudflare 仪表板中监控 Durable Object 命名空间随时间变化所使用的 SQLite 总存储量。全新的&lt;strong&gt;总存储&lt;/strong&gt;图表显示了每小时报告的最大存储量。这有助于您识别存储增长、验证数据清理并调查异常使用情况。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/durable-objects-total-storage.Cr_F72Yz_ZPhShF.webp&quot; alt=&quot;总存储图表，显示了一个 Durable Object 命名空间随着时间的推移增长到 260.1 MB 的存储。&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1436&quot; height=&quot;846&quot;&gt;&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/durable-objects&quot; data-nb-button class=&quot;group inline-flex w-max shrink-0 items-center justify-center rounded-full font-medium whitespace-nowrap no-underline shadow-xs transition-colors cursor-pointer select-none focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary-hover h-9 gap-1.5 px-3 text-sm&quot; target=&quot;_blank&quot;&gt;Go to &lt;strong&gt;Durable Objects&lt;/strong&gt;&amp;nbsp;&amp;#8599;&lt;/a&gt;
&lt;p&gt;该图表仅适用于基于 SQLite 的 Durable Object 命名空间。对于使用旧版键值存储后端的命名空间，它不会显示。不支持按 ID 或名称查看单个 Durable Object 的存储量。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/observability/metrics-and-analytics/#total-storage&quot;&gt;指标和分析&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Email Service - 在 Activity 记录中预览已发送的电子邮件</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-17-email-message-preview/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-17-email-message-preview/</guid><description>&lt;p&gt;您现在可以直接从 Email Service Activity 记录中预览已发送电子邮件的内容。展开已发送的电子邮件，然后打开全新的 &lt;strong&gt;Preview（预览）&lt;/strong&gt; 部分，通过呈现的 &lt;strong&gt;HTML&lt;/strong&gt; 正文、&lt;strong&gt;Text（文本）&lt;/strong&gt; 正文、&lt;strong&gt;Headers（标头）&lt;/strong&gt;、&lt;strong&gt;Attachments（附件）&lt;/strong&gt; 以及完整的 &lt;strong&gt;Raw（原始）&lt;/strong&gt; &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc5322&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RFC 5322&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 源码标签页，检查发送出去的邮件。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/email-message-preview.Bj6Lk8Y6_ZQJVjF.webp&quot; alt=&quot;在 Email Service Activity 记录中已发送电子邮件的渲染 HTML 预览&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2864&quot; height=&quot;1172&quot;&gt;
&lt;p&gt;此前，Activity 记录仅显示递送和身份验证的元数据，而不显示邮件内容，这使得渲染和内容问题难以调试。邮件预览功能弥补了这一空白。&lt;/p&gt;
&lt;p&gt;要启用邮件预览功能，请在您发送域的设置中开启 &lt;strong&gt;Email preview（邮件预览）&lt;/strong&gt;。预览范围包括在开启此设置期间发送的邮件，预览内容将保留大约七天。在 2026 年 7 月 2 日或之后接入的发送域将自动开启 &lt;strong&gt;Email preview（邮件预览）&lt;/strong&gt;。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/email-preview-setting.XEd1WIiO_Z1Vc9Dv.webp&quot; alt=&quot;发送域设置中的 Email preview 设置&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2256&quot; height=&quot;264&quot;&gt;
&lt;p&gt;有关详细信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/observability/logs/#message-preview&quot;&gt;电子邮件日志&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>Gateway - Gateway HTTP 策略的新请求头控制选项</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-17-http-request-header-manipulation/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-17-http-request-header-manipulation/</guid><description>&lt;p&gt;Cloudflare Gateway 现在支持在&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/http-policies/#allow&quot;&gt;允许策略&lt;/a&gt;上进行高级请求头控制。管理员可以使用静态值或动态变量来添加、重写或删除匹配请求上的请求头。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;请求头操作&quot;&gt;请求头操作&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#请求头操作&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;使用“允许”（Allow）操作的 Gateway HTTP 策略在 &lt;code&gt;rule_settings&lt;/code&gt; 中支持三种操作：&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;API 字段&lt;/th&gt;
&lt;th&gt;行为&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;添加&lt;/td&gt;
&lt;td&gt;&lt;code&gt;add_headers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;向请求头追加值。保留现有值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;重写&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set_headers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;替换请求头的值。如果请求头不存在，则创建它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;删除&lt;/td&gt;
&lt;td&gt;&lt;code&gt;delete_headers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;从请求中移除该请求头。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Gateway 按以下顺序应用操作：首先删除，然后重写，最后添加。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;动态变量&quot;&gt;动态变量&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#动态变量&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;请求头的值可以包含使用 &lt;code&gt;@{...}&lt;/code&gt; 语法的动态变量。Gateway 会在请求时根据身份、设备和网络上下文解析变量。&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;变量&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{identity.email}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;来自身份提供商的用户电子邮件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{identity.name}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;来自身份提供商的用户显示名称&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{identity.id}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cloudflare 身份 UUID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{identity.groups}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;身份提供商群组成员身份&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{identity.SAML}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SAML 属性（如果配置了）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{identity.OIDC}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OIDC 声明（如果配置了）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{source.ip}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;连接的源 IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{destination.ip}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;请求的目的 IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{device.id}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cloudflare One 客户端设备 UUID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@{device.posture}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;设备状态检查结果（JSON 字符串）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;您可以在单个请求头值中混合使用静态文本和动态变量。例如，&lt;code&gt;user-@{identity.email}&lt;/code&gt; 会解析为 &lt;code&gt;user-jdoe@example.com&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/http-policies/tenant-control/&quot;&gt;自定义请求头&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Cloudflare Fundamentals, Organizations - Distributor、MSSP 和 Agency 合作伙伴可以直接管理组织成员</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-17-distributor-mssp-self-serve-members/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-17-distributor-mssp-self-serve-members/</guid><description>&lt;p&gt;Cloudflare &lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/organizations/&quot;&gt;组织（Organizations）&lt;/a&gt;上的 Distributor、MSSP 和 Agency 合作伙伴现在可以直接从 Cloudflare 仪表板添加和管理组织成员，无需 Cloudflare 的帮助。&lt;/p&gt;
&lt;p&gt;以前，向 Distributor、MSSP 或 Agency 组织添加成员是一个手动的、需要 Cloudflare 协助的过程，该过程需要向 Cloudflare 发出请求并加入封闭式 beta 计划，而且这些组织的仪表板 &lt;strong&gt;Add member（添加成员）&lt;/strong&gt; 流程会被阻止。&lt;/p&gt;
&lt;p&gt;现在，组织管理员可以自己从 &lt;strong&gt;Organization（组织）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Members（成员）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Add member（添加成员）&lt;/strong&gt; 添加成员，无需进行 beta 注册。&lt;/p&gt;
&lt;p&gt;新成员通过与企业组织（enterprise Organizations）已使用的相同隐式访问模型来获取对组织账户的访问权限。&lt;strong&gt;Accounts（账户）&lt;/strong&gt; 列表和账户切换器对 Distributor、MSSP 和 Agency 组织的分类与企业组织保持一致，因此它们的账户在仪表板中能被正确地标记和分组。&lt;/p&gt;
&lt;p&gt;Agency 合作伙伴还可以访问组织（Organizations）仪表板，同时保留对其现有租户（Tenant）管理仪表板的访问权限。&lt;/p&gt;
&lt;p&gt;Distributor、MSSP 和 Agency 组织目前处于 beta 阶段。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/organizations/manage-members/&quot;&gt;管理组织成员&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Organizations</category></item><item><title>WAF - WAF 发布 - 2026-07-17 - 紧急</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-17-emergency-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-17-emergency-waf-release/</guid><description>
&lt;p&gt;此紧急发布添加了一条新的托管规则，以阻断对流行 Web 框架中发现的关键远程代码执行 (RCE) 和 SQL 注入 (SQLi) 漏洞的活动利用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通用框架 - 未经身份验证的 RCE: 攻击者可以通过在请求处理期间发送包含无效路径序列的恶意输入，以 Web 服务器权限执行任意系统命令。&lt;/li&gt;
&lt;li&gt;通用框架 - SQLi: 由于未能对请求参数中的输入值进行清理，攻击者可以执行未经授权的数据库查询。&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;7dfb2bd4708d4b88b9911dc0550664b6&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...550664b6&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Generic Rules - Unauthenticated RCE&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;这是新的检测。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;1c060d3a371549219ee290d7ed933fcc&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...ed933fcc&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Generic Rules - SQLi &lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;这是新的检测。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 免费规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;ebd3f2df15c74ddcbf6220c9b5ec246a&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...b5ec246a&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Generic Rules - Unauthenticated RCE &lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;这是新的检测。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 免费规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;db003b39b7774859a8d588ce33697a1a&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...33697a1a&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Generic Rules - SQLi &lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;这是新的检测。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Access, Cloudflare One - 用于基于浏览器的 RDP 的批量打印 PDF</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-16-rdp-bulk-print/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-16-rdp-bulk-print/</guid><description>&lt;p&gt;在基于浏览器的 RDP 会话中，用户现在可以将多个 PDF 文件作为单个打印作业进行打印。在远程计算机上将文件复制到剪贴板，然后选择剪贴板面板中的 &lt;strong&gt;Print all PDFs（打印所有 PDF）&lt;/strong&gt;。这些文件将合并为一个 PDF 并发送到您的本地打印机。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/rdp-bulk-print.DT4sCcI-_Z1XuBEQ.webp&quot; alt=&quot;剪贴板面板显示针对多个选定 PDF 文件的 Print all PDFs 选项。&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;768&quot; height=&quot;432&quot;&gt;
&lt;p&gt;批量打印在基于 Chromium 的浏览器和 Firefox 中可用。欲了解更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-browser/#print-pdfs&quot;&gt;为基于浏览器的 RDP 打印 PDF&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category><category>Cloudflare One</category></item><item><title>Flagship - 通过 Wrangler 从命令行管理 Flagship</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-16-wrangler-commands/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-16-wrangler-commands/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;&lt;/strong&gt; 现在包含 &lt;code&gt;wrangler flagship&lt;/code&gt;，这是一套用于在终端中管理 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/flagship/&quot;&gt;Flagship&lt;/a&gt; 应用和功能标志的命令套件。&lt;/p&gt;
&lt;p&gt;创建一个应用，如果您在 Worker 中使用它，可将其作为绑定（binding）添加到 &lt;code&gt;wrangler.json&lt;/code&gt; 或 &lt;code&gt;wrangler.jsonc&lt;/code&gt; 文件中：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flagship&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; apps&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; create&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;My Worker App&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --binding&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; FLAGS&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --update-config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;然后为您要控制的行为创建标志。标志可以是布尔值、字符串、数字或 JSON 值：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flagship&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flags&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; create&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;APP_I&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; new-checkout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flagship&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flags&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; create&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;APP_I&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; checkout-flow&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --variation&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; control=old-checkout&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --variation&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; treatment=new-checkout&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --default&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; control&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --type&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; string&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;标志创建后，可以更改其默认变体，或使用启用和禁用命令作为开关。除非您明确更改或清除，否则现有的定向规则将继续适用：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flagship&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flags&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; update&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;APP_I&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; checkout-flow&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --default&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; treatment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flagship&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flags&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; disable&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;APP_I&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; checkout-flow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flagship&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flags&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;APP_I&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; checkout-flow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;对于发布工作流，使用 &lt;code&gt;rollout&lt;/code&gt;、&lt;code&gt;split&lt;/code&gt; 和 &lt;code&gt;rules&lt;/code&gt; 在不重新部署 Worker 的情况下更改曝光量：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flagship&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flags&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; rollout&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;APP_I&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; new-checkout&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --to&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; on&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --percentage&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 25&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --by&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; user_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flagship&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flags&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; split&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;APP_I&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; checkout-flow&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --weight&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; control=&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --weight&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; treatment=&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --by&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; user_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flagship&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; flags&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; rules&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; update&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;APP_I&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; checkout-flow&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --priority&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --when&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;country equals US&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这些命令也可以在 CI/CD 流水线、脚本和 AI Agent 中使用，通过 Wrangler 检查 Flagship 状态、更新标志行为或回滚更改。&lt;/p&gt;
&lt;p&gt;请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/flagship/reference/wrangler-commands/&quot;&gt;&lt;code&gt;wrangler flagship&lt;/code&gt; 命令参考&lt;/a&gt; 获取完整的命令指南。&lt;/p&gt;</description><pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate><product>Flagship</product><category>Flagship</category></item><item><title>Rules - Cache Rules 中的 Bot management 字段和 ASN 支持</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-16-cache-rules-bot-fields-asn/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-16-cache-rules-bot-fields-asn/</guid><description>&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;cache-rules-中的-bot-management-字段和-asn-支持&quot;&gt;Cache Rules 中的 Bot management 字段和 ASN 支持&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#cache-rules-中的-bot-management-字段和-asn-支持&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Cache Rules 现在在表达式过滤器中支持 Bot management 字段和 &lt;code&gt;ip.src.asnum&lt;/code&gt; 字段。您现在可以构建区分自动流量和人类流量的缓存策略，或者根据自治系统编号（ASN）对缓存行为进行细分。&lt;/p&gt;
&lt;p&gt;这允许您对已验证的 Bot、高风险流量或特定网络运营商应用不同的缓存策略，而不会影响合法的用户请求。例如，您可以为怀疑是 Bot 流量的请求设置较短的缓存 TTL，或者对来自特定 ASN 的请求完全绕过缓存。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新字段&quot;&gt;新字段&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新字段&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;以下字段现在在 Cache Rules 表达式中可用：&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数字&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt; 到 &lt;code&gt;99&lt;/code&gt; 之间的 Bot 分数，较低的值表示请求源自 Bot 的可能性较高。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.ja3_hash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;请求的 JA3 指纹，有助于识别发起连接的客户端。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.ja4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;字符串&lt;/td&gt;
&lt;td&gt;请求的 JA4 指纹，与 JA3 相比，提供了更详细的客户端识别。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.verified_bot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;布尔值&lt;/td&gt;
&lt;td&gt;请求是否源自已验证的 Bot，例如搜索引擎爬虫。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.static_resource&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;布尔值&lt;/td&gt;
&lt;td&gt;请求是否针对静态资源，从而免于 Bot 检测。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.js_detection.passed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;布尔值&lt;/td&gt;
&lt;td&gt;在启用该功能时，浏览器是否通过了 JavaScript 检测。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.attack_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数字&lt;/td&gt;
&lt;td&gt;按攻击分数对请求进行分类，从 &lt;code&gt;1&lt;/code&gt;（可能是自动的）到 &lt;code&gt;99&lt;/code&gt;（可能是人类）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.api_score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数字&lt;/td&gt;
&lt;td&gt;按 API 分数对请求进行分类，从 &lt;code&gt;1&lt;/code&gt;（可能是自动的）到 &lt;code&gt;99&lt;/code&gt;（可能是人类）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.bot_tags[&quot;&amp;lt;TAG&amp;gt;&quot;]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;布尔值&lt;/td&gt;
&lt;td&gt;Bot 流量是否匹配指定的标签，例如 &lt;code&gt;google&lt;/code&gt; 或 &lt;code&gt;bing&lt;/code&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cf.bot_management.corporate_proxy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;布尔值&lt;/td&gt;
&lt;td&gt;请求是否源自已知的公司代理。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ip.src.asnum&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;数字&lt;/td&gt;
&lt;td&gt;传入请求 IP 地址的自治系统编号（ASN）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;aside role=&quot;note&quot; aria-label=&quot;说明&quot; class=&quot;aside-card flex items-start gap-3 rounded-lg px-4 py-3 my-4&quot; style=&quot;--_c: var(--nb-info); --_t: var(--nb-info-muted);&quot; data-astro-cid-znle5jil&gt;&lt;span class=&quot;flex h-[1.375em] shrink-0 items-center&quot; aria-hidden=&quot;true&quot; data-astro-cid-znle5jil&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[1em] w-[1em]&quot; data-astro-cid-znle5jil=&quot;true&quot; data-icon=&quot;ph:info&quot;&gt;&lt;symbol id=&quot;ai:ph:info&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m16-40a8 8 0 0 1-8 8a16 16 0 0 1-16-16v-40a8 8 0 0 1 0-16a16 16 0 0 1 16 16v40a8 8 0 0 1 8 8m-32-92a12 12 0 1 1 12 12a12 12 0 0 1-12-12&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:info&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;div class=&quot;flex min-w-0 flex-1 flex-col gap-0.5&quot; data-astro-cid-znle5jil&gt;&lt;p class=&quot;m-0 text-base leading-snug font-semibold&quot; data-astro-cid-znle5jil&gt;说明&lt;/p&gt;&lt;div class=&quot;aside-card-body text-sm leading-normal&quot; data-astro-cid-znle5jil&gt;&lt;p&gt;Bot management 字段需要订阅 Bot Management。&lt;code&gt;ip.src.asnum&lt;/code&gt; 在所有计划中均可用。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;示例&quot;&gt;示例&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#示例&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Cache Rules 表达式支持将这些字段与其他标准结合使用。以下示例为来自高风险 Bot 或意外 ASN 的 API 请求设置较短的缓存 TTL：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;(http.request.uri.path contains &quot;/api/&quot; and cf.bot_management.score lt 30)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;or&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;(http.request.uri.path contains &quot;/api/&quot; and not ip.src.asnum in {12345 67890})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;要了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cache/how-to/cache-rules/&quot;&gt;Cache Rules 文档&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ruleset-engine/rules-language/fields/&quot;&gt;字段参考&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Gateway, DNS - 内部 DNS 现在正式发布（Generally Available）</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-15-internal-dns-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-15-internal-dns-ga/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/dns/internal-dns/&quot;&gt;内部 DNS&lt;/a&gt; 现在已正式发布。内部 DNS 在您已用于公共 DNS、Zero Trust 和应用程序服务的同一个全球网络和控制平面上，为私有网络提供权威和递归 DNS 服务。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;为什么它很重要&quot;&gt;为什么它很重要&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#为什么它很重要&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;整合 DNS 运营。&lt;/strong&gt; 公共和私有 DNS 运行在同一个平台上，拥有统一的 API、审计跟踪和策略设置入口。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简化水平分割 DNS。&lt;/strong&gt; 内部和外部解析被定义为共享区域上独立的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/dns/internal-dns/dns-views/&quot;&gt;视图&lt;/a&gt;，并从单个控制平面进行管理 — 因此无需排查配置偏差。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;将 Zero Trust 扩展到 DNS。&lt;/strong&gt; 解析器策略决定哪些用户和设备针对哪个视图进行解析，并由已经监管您其余流量的同一个 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot;&gt;Gateway&lt;/a&gt; 来执行。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;设置内部 DNS 需要三个步骤：创建区域、创建视图并定义解析器策略。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;json&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot; data-nb-lang=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;POST /zones&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;account&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;    &quot;id&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;lt;ACCOUNT_ID&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;corp.internal&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;internal&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;内部 DNS 已包含在面向企业级客户的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot;&gt;Cloudflare Gateway&lt;/a&gt; 中。要开始使用，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/dns/internal-dns/&quot;&gt;Internal DNS documentation&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category><category>DNS</category></item><item><title>Email Service, Queues - 使用 Queues 订阅 Email Sending 事件</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-15-event-subscriptions/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-15-event-subscriptions/</guid><description>&lt;p&gt;您现在可以通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/queues/event-subscriptions/&quot;&gt;Queues 事件订阅&lt;/a&gt; 订阅 &lt;strong&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/api/send-emails/&quot;&gt;Email Sending&lt;/a&gt; 事件&lt;/strong&gt;，并在队列中接收出站交易性电子邮件的生命周期事件。每个订阅的作用域仅限于一个发送域——可以是区域顶点（如 &lt;code&gt;example.com&lt;/code&gt;），也可以是已验证的发送子域（如 &lt;code&gt;send.example.com&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;发布了六种事件类型：&lt;code&gt;message.delivered&lt;/code&gt;、&lt;code&gt;message.deferred&lt;/code&gt;、&lt;code&gt;message.bounced&lt;/code&gt;、&lt;code&gt;message.failed&lt;/code&gt;、&lt;code&gt;message.rejected&lt;/code&gt; 和 &lt;code&gt;message.complained&lt;/code&gt;。使用它们来跟踪送达率、对退信和投诉做出反应，并驱动抑制或重试逻辑。Email Routing 事件不会发布在此数据源上。&lt;/p&gt;
&lt;p&gt;每个事件都包含邮件详细信息、递送状态和 SMTP 响应：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;json&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot; data-nb-lang=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;cf.email.sending.message.delivered&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;email.sending&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;zoneId&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;023e105f4ecef8ad9ca31a8372d0c353&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;domain&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;example.com&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;payload&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;messageId&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;0101018f7d0c4d9a-msg-deadbeef&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;recipient&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;user@example.net&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;terminal&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;delivery&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;status&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;delivered&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;smtpStatusCode&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;250&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/platform/event-subscriptions/&quot;&gt;事件订阅&lt;/a&gt; 以查看所有事件类型和示例有效负载。&lt;/p&gt;</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category><category>Queues</category></item><item><title>KV - 已弃用旧版 Workers KV 命名空间 API 路由</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-15-kv-legacy-namespace-routes-deprecation/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-15-kv-legacy-namespace-routes-deprecation/</guid><description>&lt;p&gt;截至 2026 年 7 月 15 日，&lt;code&gt;/accounts/{account_id}/workers/namespaces/*&lt;/code&gt; 下的旧版 Workers KV API 路由已弃用，并将于 2026 年 10 月 15 日停止工作。请在此日期之前迁移到文档化的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/kv/&quot;&gt;Workers KV API&lt;/a&gt; 路由 &lt;code&gt;/accounts/{account_id}/storage/kv/namespaces/*&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;旧版路由和替换后的路由是可互换的。它们接受相同的请求参数并返回相同的响应负载。要进行迁移，请将 URL 路径从 &lt;code&gt;/workers/namespaces/&lt;/code&gt; 更新为 &lt;code&gt;/storage/kv/namespaces/&lt;/code&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;您需要做什么&quot;&gt;您需要做什么&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#您需要做什么&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;更新任何调用 &lt;code&gt;/accounts/{account_id}/workers/namespaces/&lt;/code&gt; 下路由的集成，以使用 &lt;code&gt;/accounts/{account_id}/storage/kv/namespaces/&lt;/code&gt; 下的等效路由。此迁移是直接的 URL 路径替换 —— 请求参数和响应负载完全相同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET&lt;/code&gt; 和 &lt;code&gt;POST /accounts/{account_id}/workers/namespaces&lt;/code&gt; → &lt;code&gt;GET&lt;/code&gt; 和 &lt;code&gt;POST /accounts/{account_id}/storage/kv/namespaces&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET&lt;/code&gt;、&lt;code&gt;PUT&lt;/code&gt; 和 &lt;code&gt;DELETE /accounts/{account_id}/workers/namespaces/{namespace_id}&lt;/code&gt; → &lt;code&gt;GET&lt;/code&gt;、&lt;code&gt;PUT&lt;/code&gt; 和 &lt;code&gt;DELETE /accounts/{account_id}/storage/kv/namespaces/{namespace_id}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /accounts/{account_id}/workers/namespaces/{namespace_id}/keys&lt;/code&gt; → &lt;code&gt;GET /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/keys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /accounts/{account_id}/workers/namespaces/{namespace_id}/metadata/{key_name}&lt;/code&gt; → &lt;code&gt;GET /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/metadata/{key_name}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET&lt;/code&gt;、&lt;code&gt;PUT&lt;/code&gt; 和 &lt;code&gt;DELETE /accounts/{account_id}/workers/namespaces/{namespace_id}/values/{key_name}&lt;/code&gt; → &lt;code&gt;GET&lt;/code&gt;、&lt;code&gt;PUT&lt;/code&gt; 和 &lt;code&gt;DELETE /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/values/{key_name}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关弃用时间线的更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/api/reference/deprecations/&quot;&gt;API 弃用&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><product>KV</product><category>KV</category></item><item><title>WAF - WAF 发布 - 2026-07-14</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-14-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-14-waf-release/</guid><description>
&lt;p&gt;此版本引入了针对关键基础设施漏洞的新规则。其中包括 Citrix NetScaler ADC 和 Gateway 中的未经身份验证的内存泄露缺陷（CVE-2026-8451），以及 Progress Kemp LoadMaster 中高严重性的身份验证前远程代码执行 (RCE) 漏洞（CVE-2026-8037）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2026-8451: 配置为 SAML 身份提供商 (IdP) 的 Citrix NetScaler ADC 和 NetScaler Gateway 设备受到输入验证不足漏洞的影响。远程、未经身份验证的攻击者可以通过发送格式错误的请求来利用该漏洞触发内存过度读取，从而泄露相邻设备内存中的敏感数据块。&lt;/li&gt;
&lt;li&gt;CVE-2026-8037: Progress Kemp LoadMaster 负载均衡器中的一个关键 OS 命令注入漏洞允许未经身份验证的远程攻击者实现远程代码执行 (RCE)。&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;78826e3223b94da493a2ade876973ac4&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...76973ac4&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Citrix Netscaler ADC - Insufficient Input Validation - CVE:CVE-2026-8451&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;6b64d216620449fbb273d07910233f36&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...10233f36&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Progress Kemp LoadMaster - Remote Code Execution - CVE:CVE-2026-8037&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare Web Analytics - 针对账户级 Web Analytics 仪表板提高可靠性</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-improved-reliability-for-web-analytics-dash/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-improved-reliability-for-web-analytics-dash/</guid><description>&lt;p&gt;Cloudflare Web Analytics (真实用户监控) 已经推出了性能优化，以显著提高账户级仪表板的稳定性和加载速度。&lt;/p&gt;
&lt;p&gt;对于较大的账户（拥有超过 100 个 Web Analytics 站点），加载聚合的账户级视图通常会失败，因为大规模的并行查询处理会导致超时或意外的界面错误。此更新优化了如何查询大容量多站点数据，以减少错误并提供更敏捷的仪表板体验。&lt;/p&gt;
&lt;p&gt;拥有最多 1,000 个站点的账户现在将能够加载此账户级聚合视图，而不会遇到误导性的错误。&lt;/p&gt;
&lt;p&gt;如果您的账户拥有超过 1,000 个站点，由于处理限制，我们目前无法对此数量进行聚合，但您现在将看到清晰的错误提示和说明，引导您过滤到您希望查看其数据的相关站点。&lt;/p&gt;</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate><product>Cloudflare Web Analytics</product><category>Cloudflare Web Analytics</category></item><item><title>Workers - 平台现在可以通过 Cloudflare API 创建临时账户</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-14-temporary-accounts-api/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-14-temporary-accounts-api/</guid><description>&lt;p&gt;平台现在可以通过 Cloudflare REST API 创建临时预览账户。这允许您的平台在用户登录 Cloudflare 之前部署一个在线的 Worker。&lt;/p&gt;
&lt;p&gt;借助临时账户（Temporary Accounts）API，编码智能体、AI 应用构建器和其他平台可以为生成的 Workers 和支持的资源构建类似的流程。&lt;/p&gt;
&lt;p&gt;您的平台可以在用户生成、部署和测试应用程序时，让他们保持在平台的引导流程中。用户不需要现有的 Cloudflare 账户，您的平台也不需要该账户的写入权限。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/claim-deployments-flow.Co0tUHG4_g1dGj.webp&quot; alt=&quot;图表显示 AI 智能体在临时账户中部署、验证并重新部署 Worker，然后用户进行身份验证并认领该账户以保留其资源&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1748&quot; height=&quot;368&quot;&gt;
&lt;p&gt;API 返回一个认领 URL，允许用户将临时账户及其资源转为永久账户和资源。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cloudflare.com/drop/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Drop&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 展示了这种针对静态网站的“预览并认领”模式。用户可以上传网站，进行一小时的测试和分享，只有在想要保留它时才登录或创建账户。&lt;/p&gt;
&lt;p&gt;该 API 扩展了最初通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/changelog/post/2026-06-19-temporary-accounts-for-agents/&quot;&gt;&lt;code&gt;wrangler deploy --temporary&lt;/code&gt;&lt;/a&gt; 引入的流程。您的后端现在可以直接控制配置和部署体验：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在您的产品中向用户展示 Cloudflare 的服务条款和隐私政策，并要求用户接受它们。&lt;/li&gt;
&lt;li&gt;请求并解决工作量证明（proof-of-work）挑战。&lt;/li&gt;
&lt;li&gt;创建临时预览账户。&lt;/li&gt;
&lt;li&gt;使用返回的临时账户 ID 和 API 令牌进行部署。&lt;/li&gt;
&lt;li&gt;向用户显示已部署的 Worker URL 和认领 URL。&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/provisioning/previews/challenge&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{}&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/provisioning/previews&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;termsOfService&quot;: &quot;https://www.cloudflare.com/terms/&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;privacyPolicy&quot;: &quot;https://www.cloudflare.com/privacypolicy/&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;acceptTermsOfService&quot;: &quot;yes&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;challengeToken&quot;: &quot;&amp;lt;CHALLENGE_TOKEN&amp;gt;&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;solution&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;checkpoints&quot;: &quot;&amp;lt;BASE64_CHECKPOINTS&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  }&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;有关完整的 API 流程、工作量证明要求、支持的产品和限制，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/platform/claim-deployments/#integrate-with-the-rest-api&quot;&gt;认领部署（临时账户）&lt;/a&gt;。有关此流程背后的背景和设计目标，请参阅 &lt;a href=&quot;https://blog.cloudflare.com/temporary-accounts/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Temporary Cloudflare Accounts for AI agents&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Agents, Workers - Agent 可以响应 MCP 引导式输入（elicitation）请求</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-mcp-client-elicitation/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-mcp-client-elicitation/</guid><description>
&lt;p&gt;现在，使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/model-context-protocol/apis/client-api/&quot;&gt;&lt;code&gt;addMcpServer&lt;/code&gt;&lt;/a&gt; 连接到 Model Context Protocol (MCP) 服务器的 Agent 可以处理 &lt;a href=&quot;https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;引导式输入（elicitation）&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;请求。&lt;/p&gt;
&lt;p&gt;引导式输入允许 MCP 服务器在处理工具调用时请求用户输入。表单（Form）模式收集结构化、非敏感的数据。URL 模式在打开带外（out-of-band）流（如第三方授权或支付）之前会征得同意。&lt;/p&gt;
&lt;pre class=&quot;mermaid&quot;&gt;sequenceDiagram
    participant 用户
    participant Agent as Agent (MCP 客户端)
    participant 服务器 as MCP 服务器
    participant 浏览器

    服务器-&amp;gt;&amp;gt;Agent: elicitation/create
    Agent-&amp;gt;&amp;gt;用户: 显示服务器、原因以及输入或 URL
    用户-&amp;gt;&amp;gt;Agent: 提交、打开、拒绝或取消
    Agent-&amp;gt;&amp;gt;浏览器: 征得同意后打开 URL（URL 模式）
    Agent-&amp;gt;&amp;gt;服务器: accept, decline, or cancel
    服务器--&amp;gt;&amp;gt;Agent: 可选的 URL 完成通知
&lt;/pre&gt;
&lt;p&gt;在 &lt;code&gt;onStart()&lt;/code&gt; 中为您 Agent 支持的每种模式注册一个处理器：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Agent } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;agents&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; MyAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Agent&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	onStart&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.mcp.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;configureElicitationHandlers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;			form&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;serverId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;forwardToUser&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(request, serverId),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;			url&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;serverId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;forwardToUser&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(request, serverId),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	forwardToUser&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;serverId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// Show the request in your UI and resolve after the user responds.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		throw&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Error&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			`Implement elicitation for ${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;serverId&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}: ${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Agent } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;agents&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { ElicitRequest, ElicitResult } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;agents/mcp&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; MyAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Agent&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	onStart&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.mcp.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;configureElicitationHandlers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;			form&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;serverId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;forwardToUser&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(request, serverId),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;			url&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;serverId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;forwardToUser&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(request, serverId),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	private&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; forwardToUser&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;		request&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ElicitRequest&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;		serverId&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	)&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Promise&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;ElicitResult&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// Show the request in your UI and resolve after the user responds.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		throw&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Error&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			`Implement elicitation for ${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;serverId&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}: ${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;连接仅通告配置了处理器的模式。没有处理器的 Agent 不通告任何引导式输入能力，这允许服务器使用其回退方案。SDK 会在每次 MCP 服务器注册时存储通告的模式，以便它们在 Durable Object 休眠后仍能存活。回调函数将保留在内存中，并在 &lt;code&gt;onStart()&lt;/code&gt; 运行时重新附着。&lt;/p&gt;
&lt;p&gt;有关实现细节和浏览器转发模式，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/model-context-protocol/apis/client-api/#elicitation&quot;&gt;MCP 客户端引导式输入&lt;/a&gt;。&lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/mcp-client&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;mcp-client&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/mcp-elicitation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;mcp-elicitation&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 示例实现双端对接。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;升级&quot;&gt;升级&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#升级&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;要更新到此版本：&lt;/p&gt;
&lt;script&gt;
	if (!customElements.get(&quot;nb-pm-restore&quot;)) {
		customElements.define(
			&quot;nb-pm-restore&quot;,
			class extends HTMLElement {
				connectedCallback() {
					const card = this.closest(&quot;[data-nb-pm]&quot;);
					if (!card) return;
					let saved;
					try {
						saved = sessionStorage.getItem(&quot;ui-pm-tab&quot;);
					} catch {
						return;
					}
					if (!saved) return;
					const tabs = card.querySelectorAll(&quot;[data-nb-pm-tab]&quot;);
					let idx = -1;
					tabs.forEach(function (t, i) {
						if (t.textContent.trim() === saved) idx = i;
					});
					if (idx &lt; 1) return;
					tabs.forEach(function (t, i) {
						t.setAttribute(&quot;aria-selected&quot;, String(i === idx));
					});
					card.querySelectorAll(&quot;[data-nb-pm-panel]&quot;).forEach(function (p, i) {
						p.hidden = i !== idx;
					});
				}
			},
		);
	}
&lt;/script&gt;&lt;div data-nb-pm class=&quot;w-full&quot;&gt;&lt;div class=&quot;flex w-full flex-col overflow-hidden rounded-lg text-sm ring ring-border bg-card&quot;&gt;&lt;div class=&quot;flex items-center gap-2 px-3 py-2 text-[0.8125rem] font-medium leading-5 text-muted-foreground bg-[var(--nb-surface-sunken)]&quot; role=&quot;tablist&quot; aria-label=&quot;Package manager&quot;&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;true&quot; aria-controls=&quot;pm-panel-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-npm&quot; id=&quot;pm-tab-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-npm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;npm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-yarn&quot; id=&quot;pm-tab-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-yarn&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;yarn&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-pnpm&quot; id=&quot;pm-tab-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-pnpm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;pnpm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-bun&quot; id=&quot;pm-tab-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-bun&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;bun&lt;/button&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-npm&quot; aria-labelledby=&quot;pm-tab-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-npm&quot; data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; i agents@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;npm i agents@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;symbol id=&quot;ai:ph:copy&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;symbol id=&quot;ai:ph:check&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-yarn&quot; aria-labelledby=&quot;pm-tab-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-yarn&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;yarn add agents@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-pnpm&quot; aria-labelledby=&quot;pm-tab-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-pnpm&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;pnpm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;pnpm add agents@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-bun&quot; aria-labelledby=&quot;pm-tab-pm-16d0d847-10c9-4fba-a691-67f55b41ea92-bun&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;bun&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;bun add agents@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;nb-pm-restore style=&quot;display:contents&quot;&gt;&lt;/nb-pm-restore&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/package-managers/PackageManagers.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Challenges - Precursor 引入基于会话的 Bot 检测</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-precursor-session-based-detection/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-precursor-session-based-detection/</guid><description>&lt;p&gt;Precursor 从今天起向所有客户推出。Precursor 是一种客户端 JavaScript，可实现基于会话的 Bot 检测。&lt;/p&gt;
&lt;p&gt;您可以&lt;a href=&quot;https://blog.cloudflare.com/introducing-precursor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;阅读公告博客&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;，了解我们构建 Precursor 的背景以及会话级行为检测的工作原理。&lt;/p&gt;
&lt;p&gt;启用 Precursor 后，Cloudflare 可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在整个会话中持续评估行为信号&lt;/li&gt;
&lt;li&gt;随着行为变化重新验证挑战清除状态&lt;/li&gt;
&lt;li&gt;使用会话上下文更新 Bot 评分&lt;/li&gt;
&lt;li&gt;在以往不存在的客户端提供可见性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它与现有保护措施（包括安全规则）集成，可直接从 Cloudflare 仪表板启用，并提供可配置模式以平衡安全性和用户体验。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/images/precursor/enabling_precursor.gif&quot; alt=&quot;Animated walkthrough of enabling Precursor in the Cloudflare dashboard&quot; style=&quot;border:1px solid #e5e7eb;border-radius:6px;display:block;margin:16px 0;&quot;/&gt;
&lt;p&gt;如需了解更多，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-challenges/precursor/&quot;&gt;Precursor 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><product>Challenges</product><category>Challenges</category></item><item><title>Cloudflare Fundamentals - 适用于 Markdown for Agents 的源站内容信号（Origin Content Signals）</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-markdown-for-agents-header-preservation/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-markdown-for-agents-header-preservation/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/reference/markdown-for-agents/&quot;&gt;Markdown for Agents&lt;/a&gt; 现在在将 HTML 转换为 Markdown 时，会保留源站中与安全和缓存相关的响应标头：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown for Agents 在转换后的响应上保留了安全标头，例如 &lt;code&gt;Strict-Transport-Security&lt;/code&gt; (HSTS)、&lt;code&gt;Content-Security-Policy&lt;/code&gt; (CSP)、&lt;code&gt;X-Frame-Options&lt;/code&gt;、&lt;code&gt;Set-Cookie&lt;/code&gt; 以及 CORS 标头（例如 &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;缓存标头（&lt;code&gt;Cache-Control&lt;/code&gt;、&lt;code&gt;Expires&lt;/code&gt;、&lt;code&gt;Age&lt;/code&gt;）继续透传。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您源站的 &lt;a href=&quot;https://contentsignals.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Content Signals&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 策略现在具有权威性。如果您的源站设置了 &lt;code&gt;content-signal&lt;/code&gt; 标头，Markdown for Agents 会保留它。当源站没有发送该标头时，Cloudflare 会添加默认的 &lt;code&gt;Content-Signal: ai-train=yes, search=yes, ai-input=yes&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;此版本还修复了针对目录风格基准 URL（以斜杠结尾的 URL）的相对链接解析问题。以前，像 &lt;code&gt;../page/&lt;/code&gt; 这样的相对链接可能会解析到高出一个路径段的位置并返回 &lt;code&gt;404&lt;/code&gt;。现在，链接已根据 &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc3986#section-5.2.3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RFC 3986&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 正确解析。&lt;/p&gt;
&lt;p&gt;请参阅我们的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/reference/markdown-for-agents/&quot;&gt;开发者文档&lt;/a&gt;了解更多详情。&lt;/p&gt;</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>R2 - R2 Data Catalog 现在支持只读 API 令牌</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-r2-data-catalog-read-only-tokens/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-r2-data-catalog-read-only-tokens/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 现在接受只读 API 令牌，因此仅读取数据的查询引擎和客户端不再需要读写令牌。此前，每个目录操作都需要&lt;strong&gt;管理员读写&lt;/strong&gt;令牌，这意味着只读客户端被授予了超出实际需要的访问权限。&lt;/p&gt;
&lt;p&gt;您现在可以根据工作负载对 Iceberg 引擎进行身份验证：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;只读&lt;/strong&gt;操作（例如列出命名空间、加载表和查询数据）可使用&lt;strong&gt;管理员只读&lt;/strong&gt;令牌（R2 Data Catalog 读取和 R2 存储读取）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写入&lt;/strong&gt;操作（例如创建或删除表以及提交事务）继续需要&lt;strong&gt;管理员读写&lt;/strong&gt;令牌。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这让您可以遵循最小权限原则——例如，为向表写入数据的管道使用读写令牌，为 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/config-examples/duckdb/&quot;&gt;DuckDB&lt;/a&gt; 或 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/config-examples/pyiceberg/&quot;&gt;PyIceberg&lt;/a&gt; 等查询引擎使用只读令牌。&lt;/p&gt;
&lt;p&gt;请注意，目录颁发的凭证继承用于身份验证的令牌的 R2 存储权限。为确保对底层数据的只读访问，请将 R2 存储权限也限定为只读。&lt;/p&gt;
&lt;p&gt;有关选择和创建正确令牌的详细信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/manage-catalogs/#authenticate-your-iceberg-engine&quot;&gt;对 Iceberg 引擎进行身份验证&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>R2 Data Catalog, R2 - R2 Data Catalog 压缩现在优化清单文件</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-r2-data-catalog-manifest-optimization/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-r2-data-catalog-manifest-optimization/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 是直接内置于 R2 的托管 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 目录，现在作为&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/table-maintenance/&quot;&gt;压缩&lt;/a&gt;的一部分自动优化清单文件。&lt;/p&gt;
&lt;p&gt;清单文件跟踪组成 Iceberg 表的数据文件。随着表积累了许多小型或碎片化的清单，查询引擎在查询规划期间必须读取更多元数据，这会导致查询变慢，甚至在扫描任何数据之前就已如此。&lt;/p&gt;
&lt;p&gt;当压缩运行时，R2 Data Catalog 现在会按分区重写和聚簇清单文件作为尽力而为的预处理步骤。这可以整合碎片化的清单，减少查询引擎必须打开的清单数量，并降低元数据 I/O 开销。已经聚簇良好的表将被跳过，因此该操作仅在能带来收益时才运行。&lt;/p&gt;
&lt;p&gt;对于已启用压缩的表，此功能自动生效——无需任何配置更改。&lt;/p&gt;
&lt;p&gt;如需更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/table-maintenance/&quot;&gt;表维护&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><product>R2 Data Catalog</product><category>R2 Data Catalog</category><category>R2</category></item><item><title>Data Loss Prevention - 源代码检测改进</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-10-source-code-detection-improvements/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-10-source-code-detection-improvements/</guid><description>&lt;p&gt;数据丢失防护 (DLP) 源代码检测现在专注于识别整个源代码文件的上传和下载。以前，源代码检测执行部分扫描，导致误报率较高。由于现在仅对整个源代码文件进行评估，因此嵌入在其他内容（例如聊天消息、文档或代码示例）中的代码不再被标记为源代码，从而消除了常见的误报来源。&lt;/p&gt;
&lt;p&gt;源代码检测需要至少 500 个字符来评估文件。低于此阈值的文件不会被标记，以减少噪点。此阈值过滤掉了缺乏足够上下文以进行可靠分类的小片段。&lt;/p&gt;
&lt;p&gt;启用并设置&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/data-loss-prevention/dlp-profiles/advanced-settings/#confidence-thresholds&quot;&gt;置信度级别&lt;/a&gt;以调整匹配敏感度。较高的置信度级别通过需要更强烈的信号来表明内容确实是源代码，从而减少误报。较低的置信度级别会捕获更多文件，但代价是会产生额外的噪点。&lt;/p&gt;
&lt;p&gt;源代码检测适用于 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/http-policies/&quot;&gt;Gateway HTTP 策略&lt;/a&gt;中的独立源代码文件。它不会检测嵌入在其他文件类型或有效负载（例如 &lt;code&gt;.docx&lt;/code&gt; 文件或聊天消息）中的源代码。&lt;/p&gt;
&lt;p&gt;有关更多详细信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/data-loss-prevention/dlp-profiles/predefined-profiles/#source-code&quot;&gt;Source Code predefined profiles&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category></item><item><title>Workers AI - Markdown 转换的纯文本输出</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-markdown-conversion-text-output/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-13-markdown-conversion-text-output/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/features/markdown-conversion/&quot;&gt;Markdown 转换&lt;/a&gt;服务现在支持一个新的 &lt;code&gt;output&lt;/code&gt; 转换选项，用于控制转换后内容的格式。&lt;/p&gt;
&lt;p&gt;将 &lt;code&gt;output.format&lt;/code&gt; 设置为 &lt;code&gt;text&lt;/code&gt; 以接收移除了 Markdown 语法的纯文本。默认值为 &lt;code&gt;markdown&lt;/code&gt;，因此现有转换不受影响。&lt;/p&gt;
&lt;p&gt;使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/features/markdown-conversion/usage/binding/&quot;&gt;&lt;code&gt;env.AI&lt;/code&gt;&lt;/a&gt; 绑定（binding）：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;AI&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;toMarkdown&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	{ name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;page.html&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, blob: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Blob&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;([html]) },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		conversionOptions: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			output: { format: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;typescript&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot; data-nb-lang=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;AI&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;toMarkdown&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	{ name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;page.html&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, blob: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Blob&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;([html]) },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		conversionOptions: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			output: { format: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;或者调用 REST API：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/tomarkdown&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Authorization: Bearer {API_TOKEN}&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -F&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;files=@index.html&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -F&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;conversionOptions={&quot;output&quot;: {&quot;format&quot;: &quot;text&quot;}}&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;当您请求文本输出时，每个结果的 &lt;code&gt;format&lt;/code&gt; 字段会被设置为 &lt;code&gt;text&lt;/code&gt;。有关更多详细信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/features/markdown-conversion/conversion-options/#output&quot;&gt;转换选项&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Workflows - Workflows 现在在重试时支持延迟函数</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-dynamic-retry-delays/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-dynamic-retry-delays/</guid><description>
&lt;p&gt;通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/&quot;&gt;Workflows&lt;/a&gt;，您可以为每个步骤配置内置的重试行为。以前，您可以配置具有固定延迟时长（例如秒、分钟或小时）的步骤重试，以及诸如 &lt;code&gt;constant&lt;/code&gt;、&lt;code&gt;linear&lt;/code&gt; 或 &lt;code&gt;exponential&lt;/code&gt; 之类的退避策略。&lt;/p&gt;
&lt;p&gt;步骤重试现在支持动态延迟函数。您无需仅选择基本延迟和退避策略，而是可以向 &lt;code&gt;retries.delay&lt;/code&gt; 传递一个函数，并根据失败的尝试和抛出的错误计算下一次延迟。&lt;/p&gt;
&lt;p&gt;当重试需要取决于故障类型时，这非常有用。您的 Workflow 可能需要在遇到速率限制错误后等待更长时间，但在发生短暂的网络故障后能更快地进行重试。如果下游 API 在其错误消息中返回了 &lt;code&gt;Retry-After&lt;/code&gt; 值，延迟函数也可以适应提供商的指导。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;	&quot;sync customer&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		retries: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			limit: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;			delay&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: ({ &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;				if&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (error.message.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;rate limit&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;					return&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; `${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;attempt&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; *&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 30&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;} seconds`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;				return&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;10 seconds&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; () &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; syncCustomer&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;	&quot;sync customer&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		retries: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			limit: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;			delay&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: ({ &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;				if&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (error.message.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;rate limit&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;					return&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; `${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;attempt&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; *&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 30&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;} seconds`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;				return&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;10 seconds&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; () &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; syncCustomer&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;动态延迟函数可以返回一个持续时间字符串、一个数字或一个解析为持续时间的 Promise。使用它们可以添加自适应重试行为，而无需编写单独的队列或调度逻辑。有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/build/sleeping-and-retrying/&quot;&gt;休眠和重试&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 09 Jul 2026 12:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category></item><item><title>DNS - 新的 DNS Firewall UX 带来更多仪表板设置</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-new-dns-firewall-ux/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-new-dns-firewall-ux/</guid><description>
&lt;p&gt;Cloudflare 仪表板中的 DNS Firewall 页面已焕然一新，将以前仅限 API 的多项设置引入到 UI 中，并使您查看和管理 DNS Firewall 集群的方式更加现代化。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/dnsfw-new-ux.vHgdhBZD_10POx6.webp&quot; alt=&quot;新的 DNS Firewall 用户体验&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2694&quot; height=&quot;1247&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新增功能&quot;&gt;新增功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新增功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;仪表板中提供更多设置&lt;/strong&gt;：以前只能通过 API 配置的集群选项（如攻击缓解、速率限制、否定 TTL 和解析器子网）现在可直接在仪表板中使用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更佳的表格体验&lt;/strong&gt;：重新设计了 DNS Firewall 集群表格以一目了然地呈现集群详细信息，支持调整列大小，以及显示或隐藏列以根据您的工作流定制视图。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全新的创建和编辑 UX&lt;/strong&gt;：添加和编辑集群现在使用现代化的表单，将相关设置分在组里，使配置更快速、更清晰。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;可用性&quot;&gt;可用性&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#可用性&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;作为现有订阅的一部分，向所有 DNS Firewall 客户提供。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;在哪里可以找到它&quot;&gt;在哪里可以找到它&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#在哪里可以找到它&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;在 Cloudflare 仪表板中，转到 &lt;strong&gt;DNS Firewall&lt;/strong&gt; 页面。&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/dns-firewall/clusters&quot; data-nb-button class=&quot;group inline-flex w-max shrink-0 items-center justify-center rounded-full font-medium whitespace-nowrap no-underline shadow-xs transition-colors cursor-pointer select-none focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary-hover h-9 gap-1.5 px-3 text-sm&quot; target=&quot;_blank&quot;&gt;Go to &lt;strong&gt;Clusters&lt;/strong&gt;&amp;nbsp;&amp;#8599;&lt;/a&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/dns/dns-firewall/&quot;&gt;DNS Firewall&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>Durable Objects, Workers - 新的 Durable Object 命名空间必须使用 SQLite 存储后端</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-restrict-new-kv-backed-namespaces/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-restrict-new-kv-backed-namespaces/</guid><description>
&lt;p&gt;如果您的账户中尚无基于键值 (KV) 后端的 Durable Object 命名空间，您将无法再创建新的此类命名空间。新的 Durable Object 命名空间必须使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/best-practices/access-durable-objects-storage/#create-sqlite-backed-durable-object-class&quot;&gt;SQLite 存储后端&lt;/a&gt;。自 2024 年该后端&lt;a href=&quot;https://blog.cloudflare.com/sqlite-in-durable-objects/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;正式商用 (GA)&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 以来，我们一直推荐所有新的 Durable Objects 使用该后端。&lt;/p&gt;
&lt;p&gt;通过 &lt;code&gt;new_sqlite_classes&lt;/code&gt; 迁移创建一个新类：&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;$schema&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;migrations&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;tag&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;v1&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;new_sqlite_classes&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        &quot;MyDurableObject&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;      ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;migrations&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;tag = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;v1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;new_sqlite_classes = [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MyDurableObject&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;基于 SQLite 的 Durable Objects 与键值后端具有同等的功能特性——包括&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/api/sqlite-storage-api/#synchronous-kv-api&quot;&gt;键值存储 API&lt;/a&gt;——并且还支持关系型 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/api/sqlite-storage-api/#sql-api&quot;&gt;SQL 查询&lt;/a&gt;以及 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/api/sqlite-storage-api/#pitr-point-in-time-recovery-api&quot;&gt;时间点恢复 (PITR)&lt;/a&gt;，可将对象存储恢复到过去 30 天内的任意时间点。&lt;/p&gt;
&lt;p&gt;如果您尝试在受影响的账户上创建新的基于键值的命名空间（使用 &lt;code&gt;new_classes&lt;/code&gt; 迁移），部署将失败并显示以下错误：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;Creating new key-value backed Durable Object namespaces is no longer supported on this account. Please create a namespace using a `new_sqlite_classes` migration instead.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;此更改仅影响尚未开始使用键值存储后端的账户。拥有至少一个现有基于键值命名空间的账户目前仍可创建新的命名空间，而 Workers 免费计划一直以来仅支持基于 SQLite 的 Durable Objects。这是向将 SQLite 作为 Durable Objects 单一存储后端迈出的更广泛一步，为未来现有基于键值对象的迁移路径做准备。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/durable-objects-migrations/&quot;&gt;Durable Objects 迁移&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE, Cloudflare Mesh - Zero Trust Networks 路由终点和 Cloudflare Tunnel 连接字段将于 2026 年 10 月 5 日停用</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-tunnel-routes-and-connections-api-changes/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-09-tunnel-routes-and-connections-api-changes/</guid><description>&lt;p&gt;在 &lt;strong&gt;2026 年 10 月 5 日&lt;/strong&gt;，两项变更将在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/networks/&quot;&gt;Zero Trust Networks API&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/tunnels/&quot;&gt;Cloudflare Tunnel API&lt;/a&gt; 中生效：移除经过 CIDR 编码的路由终点，且 tunnel list 和 get 响应将不再包含 &lt;code&gt;connections&lt;/code&gt; 字段。如果您通过 API、&lt;code&gt;cloudflared&lt;/code&gt;、Terraform 或其他集成管理私有网络路由或读取 tunnel 连接详情，请阅读以下部分中的变更说明并在移除日期之前完成迁移。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;路由终点&quot;&gt;路由终点&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#路由终点&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;经过 CIDR 编码的路由终点已被弃用，转而使用目前已存在的基于标准 &lt;code&gt;route_id&lt;/code&gt; 的终点。这两组终点都是通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; 或 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot;&gt;Cloudflare Mesh&lt;/a&gt; 路由私有网络（API 仍将 Mesh 节点称为 &lt;code&gt;warp_connector&lt;/code&gt;）— 仅请求形状（request shape）发生了变化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;已弃用的终点（将于 2026 年 10 月 5 日移除）：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建 tunnel 路由（CIDR 终点）：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/networks/subresources/routes/subresources/networks/methods/create/&quot;&gt;&lt;code&gt;POST /accounts/{account_id}/teamnet/routes/network/{ip_network_encoded}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;更新 tunnel 路由（CIDR 终点）：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/networks/subresources/routes/subresources/networks/methods/edit/&quot;&gt;&lt;code&gt;PATCH /accounts/{account_id}/teamnet/routes/network/{ip_network_encoded}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;删除 tunnel 路由（CIDR 终点）：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/networks/subresources/routes/subresources/networks/methods/delete/&quot;&gt;&lt;code&gt;DELETE /accounts/{account_id}/teamnet/routes/network/{ip_network_encoded}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;替代终点：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建 tunnel 路由：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/networks/subresources/routes/methods/create/&quot;&gt;&lt;code&gt;POST /accounts/{account_id}/teamnet/routes&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;更新 tunnel 路由：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/networks/subresources/routes/methods/edit/&quot;&gt;&lt;code&gt;PATCH /accounts/{account_id}/teamnet/routes/{route_id}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;删除 tunnel 路由：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/networks/subresources/routes/methods/delete/&quot;&gt;&lt;code&gt;DELETE /accounts/{account_id}/teamnet/routes/{route_id}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;变更内容&quot;&gt;变更内容&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#变更内容&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: left&quot;&gt;&lt;/th&gt;
&lt;th style=&quot;text-align: left&quot;&gt;已弃用（CIDR 编码路径）&lt;/th&gt;
&lt;th style=&quot;text-align: left&quot;&gt;替代方案&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;路由标识符&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;路径中经过 URL 编码的 CIDR (&lt;code&gt;/network/{ip_network_encoded}&lt;/code&gt;)&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;路径中的 &lt;code&gt;route_id&lt;/code&gt;（创建时 &lt;code&gt;network&lt;/code&gt; 移动到请求体中）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;创建&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;POST .../teamnet/routes/network/{ip_network_encoded}&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;请求体中包含 &lt;code&gt;network&lt;/code&gt; 和 &lt;code&gt;tunnel_id&lt;/code&gt; 的 &lt;code&gt;POST .../teamnet/routes&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;更新&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;PATCH .../teamnet/routes/network/{ip_network_encoded}&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;PATCH .../teamnet/routes/{route_id}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;删除&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;DELETE .../teamnet/routes/network/{ip_network_encoded}&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;DELETE .../teamnet/routes/{route_id}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;需要采取的行动&quot;&gt;需要采取的行动&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#需要采取的行动&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;通过调用&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/networks/subresources/routes/methods/list/&quot;&gt;列出 tunnel 路由&lt;/a&gt;获取每个路由的 &lt;code&gt;route_id&lt;/code&gt;，或者在首次使用替代终点创建路由时从响应中读取它。&lt;/li&gt;
&lt;li&gt;更新任何直接调用经过 CIDR 编码的终点的脚本、后端服务或 CI/CD 流水线。&lt;/li&gt;
&lt;li&gt;如果您使用 &lt;code&gt;cloudflared tunnel route ip add | delete&lt;/code&gt; 命令管理路由，请将 &lt;code&gt;cloudflared&lt;/code&gt; 升级到&lt;a href=&quot;https://github.com/cloudflare/cloudflared/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;最新版本&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;如果您使用 Terraform 管理路由，请确保您使用的是最新版本的 &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/zero_trust_tunnel_cloudflared_route&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;cloudflare_zero_trust_tunnel_cloudflared_route&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 资源以及 &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Terraform 提供商&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Before: create a route by URL-encoding the CIDR into the path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/teamnet/routes/network/172.16.0.0%2F16&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Content-Type: application/json&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&quot;tunnel_id&quot;: &quot;&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$TUNNEL_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;&quot;, &quot;comment&quot;: &quot;Example comment for this route.&quot;}&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# After: create a route with the network in the request body&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/teamnet/routes&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Content-Type: application/json&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&quot;network&quot;: &quot;172.16.0.0/16&quot;, &quot;tunnel_id&quot;: &quot;&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$TUNNEL_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;&quot;, &quot;comment&quot;: &quot;Example comment for this route.&quot;}&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# After: update or delete a route using its route_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; PATCH&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/teamnet/routes/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ROUTE_ID &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Content-Type: application/json&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&quot;comment&quot;: &quot;Updated comment for this route.&quot;}&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; DELETE&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/teamnet/routes/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ROUTE_ID &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;cloudflare-tunnel-和-cloudflare-mesh-连接&quot;&gt;Cloudflare Tunnel 和 Cloudflare Mesh 连接&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#cloudflare-tunnel-和-cloudflare-mesh-连接&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;自同一天起，将从 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot;&gt;Cloudflare Mesh&lt;/a&gt; 节点（&lt;code&gt;cfd_tunnel&lt;/code&gt; 和 &lt;code&gt;warp_connector&lt;/code&gt; API 资源）的 list 和 get 响应中移除 &lt;code&gt;connections&lt;/code&gt; 数组。请查询专用的连接终点，而不是从 tunnel 或节点对象中读取该字段。&lt;/p&gt;
&lt;p&gt;这会影响：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/tunnels/subresources/cloudflared/methods/list/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/cfd_tunnel&lt;/code&gt;&lt;/a&gt; — 从 &lt;code&gt;result&lt;/code&gt; 中的每个项目中移除 &lt;code&gt;connections&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/tunnels/subresources/cloudflared/methods/get/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/cfd_tunnel/{tunnel_id}&lt;/code&gt;&lt;/a&gt; — 从 &lt;code&gt;result&lt;/code&gt; 中移除 &lt;code&gt;connections&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/tunnels/subresources/warp_connector/methods/list/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/warp_connector&lt;/code&gt;&lt;/a&gt; — 从 &lt;code&gt;result&lt;/code&gt; 中的每个项目中移除 &lt;code&gt;connections&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/tunnels/subresources/warp_connector/methods/get/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/warp_connector/{tunnel_id}&lt;/code&gt;&lt;/a&gt; — 从 &lt;code&gt;result&lt;/code&gt; 中移除 &lt;code&gt;connections&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;需要采取的行动-1&quot;&gt;需要采取的行动&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#需要采取的行动-1&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;从特定于 tunnel 的连接终点获取连接详情，而不是从 list 或 get 响应中解析。对于 Cloudflare Tunnel，请调用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/tunnels/subresources/cloudflared/subresources/connections/methods/get/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/cfd_tunnel/{tunnel_id}/connections&lt;/code&gt;&lt;/a&gt;。对于 Cloudflare Mesh，请调用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/tunnels/subresources/warp_connector/subresources/connections/methods/get/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/warp_connector/{tunnel_id}/connections&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Before: read connections off the tunnel object&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/cfd_tunnel/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$TUNNEL_ID &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# After: query connections directly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/cfd_tunnel/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$TUNNEL_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/connections&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;更新任何从 tunnel list 或 get 响应中解析 &lt;code&gt;connections&lt;/code&gt; 的仪表板、监控脚本或自动化。&lt;code&gt;cloudflared&lt;/code&gt; 和 Cloudflare Terraform 提供商不读取此字段，因此它们的这一部分更新不需要做任何更改。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;做出这些更改的原因&quot;&gt;做出这些更改的原因&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#做出这些更改的原因&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;响应更小、速度更快。&lt;/strong&gt; 具有许多连接的 Cloudflare Tunnel 和 Cloudflare Mesh 节点不再膨胀每次 list 和 get 调用 — 仅在您需要时才获取连接详情。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;静态或标识路由的单一方式。&lt;/strong&gt; 统一使用 &lt;code&gt;route_id&lt;/code&gt; 消除了对路径中 CIDR 范围进行 URL 编码的需要，并且与 Zero Trust Networks API 中所有其他资源的寻址方式一致。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨 API 的一致性。&lt;/strong&gt; 这两项变更使这些终点与 Cloudflare 针对资源标识符和嵌套详情终点的标准 REST 约定保持一致。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/networks/&quot;&gt;Zero Trust Networks API&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/zero_trust/subresources/tunnels/&quot;&gt;Cloudflare Tunnel API&lt;/a&gt; 和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/routes/&quot;&gt;路由&lt;/a&gt;文档。&lt;/p&gt;</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category><category>Cloudflare Mesh</category></item><item><title>Workers - 随 Worker 上传发送 npm 包依赖项元数据</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-wrangler-deploy-upload-dependencies-metadata/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-wrangler-deploy-upload-dependencies-metadata/</guid><description>
&lt;p&gt;Wrangler 现在在执行 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/commands/general/#deploy&quot;&gt;&lt;code&gt;wrangler deploy&lt;/code&gt;&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/commands/general/#upload&quot;&gt;&lt;code&gt;wrangler versions upload&lt;/code&gt;&lt;/a&gt; 期间，从您项目的 &lt;code&gt;package.json&lt;/code&gt; 中收集 npm 包依赖项信息，并将其包含在发送到 Cloudflare API 的上传元数据中。这些数据包括每个依赖项的名称、声明的版本范围以及实际安装的确切版本，有助于实现依赖项分析以及未来的供应链安全功能（如漏洞警报）。&lt;/p&gt;
&lt;p&gt;要选择停用，请在您的 Wrangler 配置文件中将 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/configuration/#top-level-only-keys&quot;&gt;&lt;code&gt;dependencies_instrumentation.enabled&lt;/code&gt;&lt;/a&gt; 设置为 &lt;code&gt;false&lt;/code&gt;：&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;dependencies_instrumentation&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;enabled&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;dependencies_instrumentation&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;enabled = &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;有关更多详细信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/configuration/#top-level-only-keys&quot;&gt;Wrangler 配置&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Search - 按精确对象键筛选 AI Search 列表项</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-ai-search-list-items-key-filter/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-ai-search-list-items-key-filter/</guid><description>&lt;p&gt;在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; 中，您可以将文件上传到实例，或连接诸如 R2 存储桶之类的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/configuration/data-source/&quot;&gt;数据源&lt;/a&gt;，从而让您能够使用自然语言搜索您的内容。每个文件都成为由对象 **key（其文件名或路径）**标识的 &lt;strong&gt;项（item）&lt;/strong&gt;。&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/api/items/rest-api/&quot;&gt;列表项端点&lt;/a&gt;会返回实例中的项。&lt;/p&gt;
&lt;p&gt;该端点现在接受 &lt;code&gt;key&lt;/code&gt; 查询参数，因此您可以通过精确的对象键查找单个项，而无需翻页浏览整个列表。这为您知道键但不知道 ID 的情况补充了现有的 &lt;code&gt;item_id&lt;/code&gt; 筛选器。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&amp;lt;ACCOUNT_ID&amp;gt;/ai-search/instances/&amp;lt;INSTANCE_NAME&amp;gt;/items?key=docs/readme.md&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &amp;lt;API_TOKEN&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;键在每个数据源中是唯一的，因此当多个数据源中存在相同的键时，请将 &lt;code&gt;key&lt;/code&gt; 与 &lt;code&gt;source&lt;/code&gt; 结合使用（例如 &lt;code&gt;source=builtin&lt;/code&gt;）以消除歧义。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/api/items/rest-api/&quot;&gt;管理项&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Workers AI, AI Search - Workers AI toMarkdown 和 AI Search 现在支持 GIF 和 BMP 图像转换</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-gif-bmp-image-support/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-gif-bmp-image-support/</guid><description>&lt;p&gt;除了已支持的 JPEG、PNG、WebP 和 SVG 格式外，Workers AI &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/features/markdown-conversion/&quot;&gt;Markdown 转换&lt;/a&gt; (&lt;code&gt;toMarkdown&lt;/code&gt;) 现在还支持 &lt;code&gt;.gif&lt;/code&gt; 和 &lt;code&gt;.bmp&lt;/code&gt; 图像文件。&lt;/p&gt;
&lt;p&gt;GIF 和 BMP 文件与其他格式运行相同的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/features/markdown-conversion/how-it-works/#images&quot;&gt;图像流水线&lt;/a&gt;。根据需要调整每张图像的大小（对于动态 GIF，仅使用第一帧），然后传递给目标检测模型以识别其包含的内容。这些检测到的目标会提示视觉模型编写图像的自然语言描述，该描述将变成可搜索、机器可读的 Markdown。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; 会自动使用 &lt;code&gt;toMarkdown&lt;/code&gt; 来处理它引入的文件，因此下一次您的索引同步时会自动包含任何 &lt;code&gt;.gif&lt;/code&gt; 和 &lt;code&gt;.bmp&lt;/code&gt; 文件，无需更改任何配置。当您的内容混合了多种格式时，例如充满屏幕截图的支持知识库或 BMP 扫描件的存档，这将非常有用。&lt;/p&gt;
&lt;p&gt;详细了解 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/features/markdown-conversion/&quot;&gt;Markdown 转换&lt;/a&gt; 以及 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/configuration/data-source/#supported-file-types&quot;&gt;AI Search 支持的文件类型&lt;/a&gt;的完整列表。&lt;/p&gt;</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category><category>AI Search</category></item><item><title>Cloudflare One, Cloudflare WAN - IPsec 降级保护 (Beta)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-ipsec-downgrade-protection/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-ipsec-downgrade-protection/</guid><description>&lt;p&gt;Cloudflare IPsec 现在支持 &lt;a href=&quot;https://datatracker.ietf.org/doc/draft-ietf-ipsecme-ikev2-downgrade-prevention/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;IKE_SA_INIT_FULL_TRANSCRIPT_AUTH&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; IKEv2 扩展，以防御 IPsec 隧道上的降级攻击。&lt;/p&gt;
&lt;p&gt;IKEv2 的原始身份验证设计是让每个端点仅对其自己的出网消息进行签名，而不是对完整的握手脚本进行签名。具有量子计算能力的&lt;a href=&quot;https://www.cloudflare.com/learning/security/threats/on-path-attack/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;路径上（on-path）攻击者&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;可以利用这一点，通过将连接降级为传统密码学，从而绕过后量子密钥交换。&lt;code&gt;IKE_SA_INIT_FULL_TRANSCRIPT_AUTH&lt;/code&gt; 扩展通过在身份验证交换期间让双方对整个握手脚本进行签名来解决此问题，从而防止攻击者在不被发现的情况下操纵协商。&lt;/p&gt;
&lt;p&gt;关键详情：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 Cloudflare WAN 和 Magic Transit IPsec 隧道中提供 Beta 版。&lt;/li&gt;
&lt;li&gt;启用该功能标志后，Cloudflare 会作为响应方（responder）无条件发送 &lt;code&gt;IKE_SA_INIT_FULL_TRANSCRIPT_AUTH&lt;/code&gt; 通知。&lt;/li&gt;
&lt;li&gt;发起方（您的设备）和响应方（Cloudflare）都必须支持该扩展，降级保护才能生效。&lt;/li&gt;
&lt;li&gt;此功能目前由每个账户的功能标志控制。请联系您的账户团队将其开启。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/reference/gre-ipsec-tunnels/#improved-downgrade-protection-beta&quot;&gt;降级保护&lt;/a&gt;了解更多详情。&lt;/p&gt;</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Cloudflare WAN</category></item><item><title>R2 SQL - 从仪表板使用 R2 SQL 查询 R2 Data Catalog 表</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-query-r2-sql-from-dashboard/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-query-r2-sql-from-dashboard/</guid><description>
&lt;p&gt;您现在可以直接从 Cloudflare 仪表板使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt; 查询您的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 表，而无需安装 CLI 或接入客户端。这使得在同一个地方探索 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 数据、验证查询并检查结果变得非常容易。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/r2-sql-studio.DCmHJaqy_Z1PiDx0.webp&quot; alt=&quot;R2 SQL 查询编辑器&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3080&quot; height=&quot;1696&quot;&gt;
&lt;p&gt;要开始使用，请转到 Cloudflare 仪表板中的 &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/data-catalog/overview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;R2 Data Catalog&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 并选择 **Query data（查询数据）**以启动内置的 SQL 编辑器。从那里您可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;交互式编写和运行查询&lt;/strong&gt; — 直接在浏览器中对 R2 SQL 进行迭代，提供语法高亮和自动完成功能，而无需通过 Wrangler 或 REST API 重新运行命令。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;探索您的数据&lt;/strong&gt; — 在编辑器旁探索您的命名空间和表，这样您无需离开页面或使用其他工具即可发现哪些内容是可查询的。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;了解结果和性能&lt;/strong&gt; — 查看包含每个查询统计信息的结果集，导出它们，并获取有用的 &lt;code&gt;EXPLAIN&lt;/code&gt; 输出以确切了解查询如何运行。&lt;/li&gt;
&lt;/ul&gt;
&lt;aside role=&quot;note&quot; aria-label=&quot;说明&quot; class=&quot;aside-card flex items-start gap-3 rounded-lg px-4 py-3 my-4&quot; style=&quot;--_c: var(--nb-info); --_t: var(--nb-info-muted);&quot; data-astro-cid-znle5jil&gt;&lt;span class=&quot;flex h-[1.375em] shrink-0 items-center&quot; aria-hidden=&quot;true&quot; data-astro-cid-znle5jil&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[1em] w-[1em]&quot; data-astro-cid-znle5jil=&quot;true&quot; data-icon=&quot;ph:info&quot;&gt;&lt;symbol id=&quot;ai:ph:info&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m16-40a8 8 0 0 1-8 8a16 16 0 0 1-16-16v-40a8 8 0 0 1 0-16a16 16 0 0 1 16 16v40a8 8 0 0 1 8 8m-32-92a12 12 0 1 1 12 12a12 12 0 0 1-12-12&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:info&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;div class=&quot;flex min-w-0 flex-1 flex-col gap-0.5&quot; data-astro-cid-znle5jil&gt;&lt;p class=&quot;m-0 text-base leading-snug font-semibold&quot; data-astro-cid-znle5jil&gt;说明&lt;/p&gt;&lt;div class=&quot;aside-card-body text-sm leading-normal&quot; data-astro-cid-znle5jil&gt;&lt;p&gt;您的 R2 SQL 凭证是为您生成并存储的，可以在 R2 Data Catalog 设置页面中进行轮换。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><product>R2 SQL</product><category>R2 SQL</category></item><item><title>Workers AI - Moondream 3.1 现已在 Workers AI 上可用</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-moondream3.1-workers-ai/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-moondream3.1-workers-ai/</guid><description>&lt;p&gt;我们与 &lt;a href=&quot;https://moondream.ai/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Moondream&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 合作，将其最新模型 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/moondream3.1-9B-A2B/&quot;&gt;&lt;code&gt;@cf/moondream/moondream3.1-9B-A2B&lt;/code&gt;&lt;/a&gt; 引入 Workers AI。Moondream 3.1 是一款基于混合专家（mixture-of-experts）架构构建的快速视觉语言模型，总参数量为 9B，活跃参数量为 2B，可在保持快速、高性价比推理的同时提供前沿级别的视觉推理。&lt;/p&gt;
&lt;p&gt;Moondream 3.1 专为实际视觉任务而设计，具备 32K token 上下文窗口，用于处理复杂查询和结构化输出。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;关键能力&quot;&gt;关键能力&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#关键能力&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Query（查询）&lt;/strong&gt; — 针对图像提出开放式问题，带有一个可选的推理参数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caption（描述）&lt;/strong&gt; — 生成图像的简短、正常或长描述&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Point（指向）&lt;/strong&gt; — 返回与目标词组匹配的对象坐标&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detect（检测）&lt;/strong&gt; — 返回与目标词组匹配的对象边界框&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;边缘实时视觉&quot;&gt;边缘实时视觉&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#边缘实时视觉&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;像实时摄像头馈送、机器人、内容审核和交互式智能体之类的视觉工作负载，需要毫秒级而不是秒级的响应。Moondream 3.1 较小的活跃占用（2B 活跃参数）与 Workers AI 的无服务器、全球分布式推理完美结合：请求可在靠近您用户的地方运行，且流式响应几乎可以立即开始返回 token。&lt;/p&gt;
&lt;p&gt;在我们的测试中，首个 token 在大约 20–30 毫秒内流式返回，并且在每项任务中结果都非常迅速。以下示例端到端时间（客户端观察到的中位数，包括网络往返时间）是针对一张简单的、单一主体的图像。实际延迟很大程度上取决于图像以及您所要求的详细程度。&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;任务&lt;/th&gt;
&lt;th&gt;端到端 (p50)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;query&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~770 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;caption&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~480 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;point&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~145 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;detect&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~160 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;在这样的速度下，您可以在处理请求时以内联方式调用模型，而无需将工作推送到后台队列或单独的服务。这开启了那些“如果响应缓慢就会破坏体验”的使用场景：在存储用户上传的图像前对其进行审核、在视频帧中定位对象以驱动实时叠加层、在提交表单时从文档中提取字段，或者让智能体在单轮内检查屏幕截图并决定其下一步操作。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;快速入门&quot;&gt;快速入门&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#快速入门&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/configuration/bindings/&quot;&gt;Workers AI 绑定（binding）&lt;/a&gt; (&lt;code&gt;env.AI.run()&lt;/code&gt;) 或 &lt;code&gt;/ai/run&lt;/code&gt; 处的 REST API 来使用 Moondream 3.1。您还可以在这些端点中搭配使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/moondream3.1-9B-A2B/&quot;&gt;Moondream 3.1 模型页面&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/platform/pricing/&quot;&gt;定价&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Workers - Cloudflare Drop</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-cloudflare-drag-and-drop/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-08-cloudflare-drag-and-drop/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflare.com/drop&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Drop&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 允许您向 Cloudflare 部署静态网站，而无需先拥有 Cloudflare 账户。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/cloudflare-drag-and-drop-upload.KujM69eS_2q5iiu.webp&quot; alt=&quot;Cloudflare 拖放上传界面，用于浏览文件夹或 ZIP 文件&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2498&quot; height=&quot;1294&quot;&gt;
&lt;p&gt;上传包含静态资产（静态 HTML、CSS、JavaScript、图像和字体）的文件夹或 ZIP 文件，即可获得保持在线 1 小时临时的实时预览。在此时间窗内，您可以测试网站、共享预览 URL 或&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/platform/claim-deployments/&quot;&gt;认领该部署&lt;/a&gt;以保留它。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/cloudflare-drag-and-drop-preview.BQ1__XRX_2eteg3.webp&quot; alt=&quot;Cloudflare 拖放临时实时预览界面，带有认领和复制认领链接操作&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2936&quot; height=&quot;1594&quot;&gt;
&lt;p&gt;当您准备好使部署永久生效时，请点击 &lt;strong&gt;Claim（认领）&lt;/strong&gt; 以登录或创建 Cloudflare 账户。您可以将网站认领到现有的 Cloudflare 账户中，也可以为该部署创建一个新账户。&lt;/p&gt;
&lt;aside role=&quot;note&quot; aria-label=&quot;说明&quot; class=&quot;aside-card flex items-start gap-3 rounded-lg px-4 py-3 my-4&quot; style=&quot;--_c: var(--nb-info); --_t: var(--nb-info-muted);&quot; data-astro-cid-znle5jil&gt;&lt;span class=&quot;flex h-[1.375em] shrink-0 items-center&quot; aria-hidden=&quot;true&quot; data-astro-cid-znle5jil&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[1em] w-[1em]&quot; data-astro-cid-znle5jil=&quot;true&quot; data-icon=&quot;ph:info&quot;&gt;&lt;symbol id=&quot;ai:ph:info&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m16-40a8 8 0 0 1-8 8a16 16 0 0 1-16-16v-40a8 8 0 0 1 0-16a16 16 0 0 1 16 16v40a8 8 0 0 1 8 8m-32-92a12 12 0 1 1 12 12a12 12 0 0 1-12-12&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:info&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;div class=&quot;flex min-w-0 flex-1 flex-col gap-0.5&quot; data-astro-cid-znle5jil&gt;&lt;p class=&quot;m-0 text-base leading-snug font-semibold&quot; data-astro-cid-znle5jil&gt;说明&lt;/p&gt;&lt;div class=&quot;aside-card-body text-sm leading-normal&quot; data-astro-cid-znle5jil&gt;&lt;p&gt;如果您正在创建新账户，则需要先验证您的电子邮件地址才能继续。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/cloudflare-drag-and-drop-claim.8Zv6px9B_Z1vMkhk.webp&quot; alt=&quot;Cloudflare 拖放认领账户界面，显示认领链接过期前的倒计时&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1712&quot; height=&quot;812&quot;&gt;
&lt;p&gt;认领网站后，您可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;添加域名&lt;/strong&gt;：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/configuration/routing/custom-domains/&quot;&gt;连接&lt;/a&gt;现有域名或为您的网站购买新域名。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启用&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/observability/&quot;&gt;可观测性&lt;/a&gt;&lt;/strong&gt;：监控您网站的性能和使用情况。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/reference/markdown-for-agents/&quot;&gt;Markdown for Agents&lt;/a&gt;&lt;/strong&gt;：允许 AI 智能体以 Markdown 格式访问您网站的内容。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;控制访问&lt;/strong&gt;：将您的网站设为&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/policies/&quot;&gt;私有&lt;/a&gt;并选择谁可以查看它。&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/cloudflare-drag-and-drop-post-claim.DvlaNmI7_Zmbdcj.webp&quot; alt=&quot;已认领的 Cloudflare 拖放网站设置界面，显示添加域名、控制访问、启用可观测性以及为智能体启用 Markdown 的选项&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1812&quot; height=&quot;1266&quot;&gt;</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Windows (version 2026.6.850.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-warp-windows-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This hotfix addresses a Windows authentication issue in the embedded WebView2 browser. Single sign-on could fail to use the Windows primary account, causing users to be prompted for an interactive sign-in. The embedded authentication browser now allows SSO providers to use the OS primary account when available.&lt;/p&gt;
</description><pubDate>Tue, 07 Jul 2026 18:35:35 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Workflows - Workflows 定价增加按步骤计费。步骤和存储计费将不早于 2026 年 8 月 10 日开始。</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-workflows-billing-updates/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-workflows-billing-updates/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/&quot;&gt;Workflows&lt;/a&gt; 定价现在包括按步骤计费。自最初的公开 Beta 版以来已启用请求和 CPU 时间计费，且不会发生变化。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;workflows-增加步骤计费&quot;&gt;Workflows 增加步骤计费&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#workflows-增加步骤计费&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;步骤是 Workflow 执行的每个工作单元，包括诸如&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/build/sleeping-and-retrying/&quot;&gt;休眠&lt;/a&gt;或&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/build/events-and-parameters/&quot;&gt;等待事件&lt;/a&gt;之类的步骤操作。&lt;/p&gt;
&lt;p&gt;您可以使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/observability/metrics-analytics/#query-via-the-graphql-api&quot;&gt;GraphQL Analytics API&lt;/a&gt; 查询 Workflows 分析，包括 Workflow 实例的 &lt;code&gt;stepCount&lt;/code&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;步骤和存储计费将于-2026-年-8-月-10-日生效&quot;&gt;步骤和存储计费将于 2026 年 8 月 10 日生效&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#步骤和存储计费将于-2026-年-8-月-10-日生效&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;自 2026 年 8 月 10 日起（不早于该日期），Cloudflare 将开始对 Workers Paid 计划的步骤和存储使用进行计费。&lt;/p&gt;
&lt;p&gt;存储定价自 Workflows 正式发布以来就已公布，且不会发生变化。存储以 GB-月为单位度量持久化的 Workflow 状态。&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;Workers Free&lt;/th&gt;
&lt;th&gt;Workers Paid&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;步骤&lt;/td&gt;
&lt;td&gt;每天包含 3,000 步&lt;/td&gt;
&lt;td&gt;每月包含 500,000 步，之后每增加 100,000 步为 0.80 美元&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;存储&lt;/td&gt;
&lt;td&gt;包含 1 GB-月&lt;/td&gt;
&lt;td&gt;包含 1 GB-月，之后每增加 1 GB-月为 0.20 美元&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Workers Free 计划的开发者无需为超出包含数量的步骤或存储付费。&lt;/p&gt;
&lt;p&gt;Cloudflare 在 2026 年 8 月 10 日之前不会对步骤和存储使用量进行计费。&lt;/p&gt;
&lt;p&gt;在此更改生效之前，您可以在 &lt;a href=&quot;https://dash.cloudflare.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare 仪表板&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;中查看 Workflows 使用情况。为了降低成本，可以考虑减少每个 Workflow 的步骤数量，或提高存储状态的内存效率。&lt;/p&gt;
&lt;p&gt;有关完整详细信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/reference/pricing/&quot;&gt;Workflows 定价&lt;/a&gt;页面。&lt;/p&gt;</description><pubDate>Tue, 07 Jul 2026 12:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category></item><item><title>Access, Cloudflare One - 用于基于浏览器的 RDP 的文件传输控制（Beta）</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-rdp-file-transfer-beta/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-rdp-file-transfer-beta/</guid><description>&lt;p&gt;您现在可以为使用 Cloudflare Access 的基于浏览器的 RDP 配置文件传输控制，允许您限制用户是否可以在其本地计算机与远程 Windows 服务器之间上传或下载文件。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/file-transfer-policy-control.CiSEa5rr_Z1oqxAg.webp&quot; alt=&quot;Access 策略配置中的文件传输连接设置。&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1356&quot; height=&quot;692&quot;&gt;
&lt;p&gt;对于支持自带设备（BYOD）政策或使用未托管设备的第三方承包商的组织，此功能非常有用。通过限制文件传输，您可以防止敏感数据从远程会话转移到用户的个人设备。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;配置选项&quot;&gt;配置选项&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#配置选项&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;文件传输控制在您的 Access 应用程序中针对每个策略进行配置，与现有的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-browser/#connection-settings&quot;&gt;文本剪贴板控制&lt;/a&gt;并列。对于每个策略，您可以选择以下选项之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;允许从客户端到远程 RDP 会话&lt;/strong&gt; — 用户可以从其本地计算机上传文件到基于浏览器的 RDP 会话中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;允许从远程 RDP 会话到客户端&lt;/strong&gt; — 用户可以从基于浏览器的 RDP 会话下载文件到其本地计算机中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;允许双向&lt;/strong&gt; — 用户可以在其本地计算机与基于浏览器的 RDP 会话之间上传和下载文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;禁用复制/粘贴&lt;/strong&gt; — 不允许用户在其本地计算机与基于浏览器的 RDP 会话之间传输文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;默认情况下，新策略的文件传输功能是被拒绝的。对于在此功能可用之前创建的现有 Access 应用程序，文件传输依然被拒绝。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;工作原理&quot;&gt;工作原理&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#工作原理&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;要上传，请将文件拖入浏览器窗口，或选择 RDP 会话左侧的设置齿轮图标。要下载，请在远程会话中复制文件，然后选择设置齿轮以进行下载、将多个文件下载为 zip 包，或者将 PDF 打印到本地打印机。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/clipboard-side-panel.Us2RfXfs_Z1hkXRl.webp&quot; alt=&quot;显示可供传输文件的剪贴板侧边面板。&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;812&quot; height=&quot;532&quot;&gt;&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/remote-doc-ready-for-download-or-print-local.Dcm5hrGD_kMExI.webp&quot; alt=&quot;已准备好下载或本地打印的远程文档。&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;770&quot; height=&quot;442&quot;&gt;
&lt;p&gt;此功能处于 Beta 阶段，可在所有 Zero Trust 方案中使用。欲了解更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-browser/#transfer-files&quot;&gt;基于浏览器的 RDP 的文件传输&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category><category>Cloudflare One</category></item><item><title>Browser Isolation, Cloudflare One - 浏览器隔离支持授权代理端点</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-authorization-proxy-endpoint-support/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-authorization-proxy-endpoint-support/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/remote-browser-isolation/&quot;&gt;浏览器隔离&lt;/a&gt;现在支持 Gateway &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#authorization-endpoint&quot;&gt;授权代理端点&lt;/a&gt;。您可以对通过授权代理端点路由的流量应用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/remote-browser-isolation/isolation-policies/&quot;&gt;HTTP 隔离策略&lt;/a&gt;，方式与对来自 Cloudflare One 客户端的流量相同。&lt;/p&gt;
&lt;p&gt;此前，只有&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#source-ip-endpoint&quot;&gt;源 IP 代理端点&lt;/a&gt;支持浏览器隔离，且仅支持非基于身份的策略。由于授权代理端点通过身份提供商对用户进行认证，您现在无需 Cloudflare One 客户端即可对 PAC 文件代理流量应用基于身份的隔离策略。&lt;/p&gt;
&lt;p&gt;如需开始，请&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#authorization-endpoint&quot;&gt;创建授权代理端点&lt;/a&gt;并&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/remote-browser-isolation/isolation-policies/&quot;&gt;构建隔离策略&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><product>Browser Isolation</product><category>Browser Isolation</category><category>Cloudflare One</category></item><item><title>Browser Run - Browser Run 无障碍树新端点</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-browser-run-accessibility-tree-endpoint/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-browser-run-accessibility-tree-endpoint/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/&quot;&gt;Browser Run&lt;/a&gt; 现在支持独立的 &lt;code&gt;/accessibilityTree&lt;/code&gt; 端点，为 Agent 和自动化工作流提供对已渲染网页浏览器无障碍树的直接访问。&lt;/p&gt;
&lt;p&gt;无障碍树是浏览器对已渲染页面的结构化视图：角色、名称、状态、值和层级关系。它对无障碍工具很有用，同时也对需要页面结构而无需处理原始 HTML 噪音或截图成本的 AI Agent 和自动化工作流非常实用。&lt;/p&gt;
&lt;p&gt;对于 AI Agent 而言，这意味着减少了从像素推断信息以及解析 HTML 的工作。您可以直接提供页面结构，帮助 Agent 识别可用元素并判断其可执行的操作。&lt;/p&gt;
&lt;p&gt;使用新的 &lt;code&gt;/accessibilityTree&lt;/code&gt; 端点，当您只需要页面的语义结构时，可以直接请求无障碍树。如果需要在单次 API 调用中获取多种页面格式，可以使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/snapshot/&quot;&gt;&lt;code&gt;/snapshot&lt;/code&gt;&lt;/a&gt; 端点，该端点同时返回 Markdown、HTML 和截图。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;https://api.cloudflare.com/client/v4/accounts/&amp;lt;accountId&amp;gt;/browser-run/accessibilityTree&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Authorization: Bearer &amp;lt;apiToken&amp;gt;&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Content-Type: application/json&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;url&quot;: &quot;https://example.com/&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;json&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot; data-nb-lang=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;success&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;result&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;accessibilityTree&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;role&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;RootWebArea&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Example Domain&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;children&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;					&quot;role&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;heading&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;					&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Example Domain&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;					&quot;level&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;					&quot;role&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;link&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;					&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Learn more&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;使用 &lt;code&gt;interestingOnly&lt;/code&gt; 仅返回语义上有意义的节点，或使用 &lt;code&gt;root&lt;/code&gt; 捕获特定子树的无障碍树。&lt;/p&gt;
&lt;p&gt;请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/accessibility-tree-endpoint/&quot;&gt;&lt;code&gt;/accessibilityTree&lt;/code&gt; 文档&lt;/a&gt; 以获取使用示例和支持的参数。&lt;/p&gt;</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><product>Browser Run</product><category>Browser Run</category></item><item><title>Logs - 新的 WebSocket Analytics Logpush 数据集</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-websocket-analytics-dataset/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-07-websocket-analytics-dataset/</guid><description>&lt;p&gt;企业客户现在可以使用新的 &lt;code&gt;websocket_analytics&lt;/code&gt; 数据集将每个连接的 WebSocket 分析推送到任何 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/enable-destinations/&quot;&gt;Logpush 目标&lt;/a&gt;。每条日志记录在 WebSocket 连接关闭时生成，并包含以前只有 Cloudflare 工程师才能通过内部工具访问的字段。&lt;/p&gt;
&lt;p&gt;关键字段包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ConnectionCloseReason&lt;/code&gt;&lt;/strong&gt; — 连接结束的原因：&lt;code&gt;peerReset&lt;/code&gt;、&lt;code&gt;peerNoError&lt;/code&gt;、&lt;code&gt;timedOut&lt;/code&gt;、&lt;code&gt;upstreamReset&lt;/code&gt;、&lt;code&gt;protocolViolation&lt;/code&gt;、&lt;code&gt;unspecifiedError&lt;/code&gt; 或 &lt;code&gt;none&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ConnectionCloseSource&lt;/code&gt;&lt;/strong&gt; — 哪一方发起关闭：&lt;code&gt;upstream&lt;/code&gt;、&lt;code&gt;downstream&lt;/code&gt;、&lt;code&gt;me&lt;/code&gt; 或 &lt;code&gt;both&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ConnectionTransportCloseCode&lt;/code&gt;&lt;/strong&gt; — TLS 警报代码或 TCP 级别关闭代码，提供额外精度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RayID&lt;/code&gt;&lt;/strong&gt; — 将 WebSocket 连接事件与现有 HTTP 请求日志关联。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;该数据集还包含方向性字节计数（&lt;code&gt;BytesSentClient&lt;/code&gt;、&lt;code&gt;BytesReceivedClient&lt;/code&gt;、&lt;code&gt;BytesSentOrigin&lt;/code&gt;、&lt;code&gt;BytesReceivedOrigin&lt;/code&gt;）、连接时间戳、客户端 IP、机房代码以及原始 WebSocket 升级请求的元数据。&lt;/p&gt;
&lt;p&gt;这些数据可帮助您直接在现有日志分析工具中，根据连接关闭模式构建告警——例如，按主机和数据中心分组，检测 TCP 重置（&lt;code&gt;ConnectionCloseReason == &quot;peerReset&quot;&lt;/code&gt;）的峰值。&lt;/p&gt;
&lt;p&gt;有关可用字段的完整列表，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/zone/websocket_analytics/&quot;&gt;WebSocket Analytics&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>R2 - R2 Data Catalog 在手动删除数据前发出警告</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-06-r2-data-catalog-delete-warnings/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-06-r2-data-catalog-delete-warnings/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 是直接内置于 R2 存储桶的托管 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 目录。Iceberg 通过元数据文件树追踪您的数据，因此每次插入、更新和删除都必须通过目录事务进行。在目录外手动添加、修改或删除对象可能会留下指向不再存在的文件的指针，使表损坏成难以恢复的不一致状态。&lt;/p&gt;
&lt;p&gt;为帮助防止此类情况，R2 仪表板和 Wrangler 现在会在您尝试对启用 Data Catalog 的存储桶执行手动删除操作时发出警告。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;仪表板&quot;&gt;仪表板&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#仪表板&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;当您尝试从启用 R2 Data Catalog 的存储桶中删除对象时，仪表板会显示一个警告，解释该操作可能使目录处于无效状态，并提供正确删除数据的文档链接。您可以取消操作或选择继续执行。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/data-catalog-delete-warning.DoBR0sFO_1wfGWd.webp&quot; alt=&quot;在启用 Data Catalog 的存储桶中删除对象之前显示的 R2 仪表板警告&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1886&quot; height=&quot;684&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;wrangler&quot;&gt;Wrangler&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#wrangler&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Wrangler 现在在运行删除操作前会检查存储桶是否启用了 Data Catalog，并在继续之前发出警告：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;Data Catalog is enabled for this bucket. &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;Proceeding may leave the data catalog in an invalid state. Continue?&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;要了解如何安全管理和删除表中的数据，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>Cloudflare One Appliance, Cloudflare One, Cloudflare WAN - 在仪表板中自助注册 Cloudflare One 虚拟 Appliance</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-06-virtual-appliance-self-serve-ui/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-06-virtual-appliance-self-serve-ui/</guid><description>&lt;p&gt;您现在可以直接从仪表板注册 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/configuration/appliance/&quot;&gt;Cloudflare One 虚拟 Appliance&lt;/a&gt; 并生成其许可证密钥，而无需联系您的账户团队。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/2026-07-06-virtual-appliance-self-serve-ui.Dn2NC_ql_1WdiRS.webp&quot; alt=&quot;从 Connectors 页面注册 Cloudflare One 虚拟 Appliance 并生成其身份验证密钥&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1800&quot; height=&quot;988&quot;&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;strong&gt;Connectors（连接器）&lt;/strong&gt; 页面上，选择 &lt;strong&gt;Add an appliance（添加设备）&lt;/strong&gt; 并选择 &lt;strong&gt;Virtual appliance（虚拟设备）&lt;/strong&gt; 以注册虚拟 Appliance 并生成其身份验证密钥。&lt;/li&gt;
&lt;li&gt;从虚拟 Appliance 连接器的菜单中，使用 &lt;strong&gt;Regenerate authentication key&lt;/strong&gt; 来轮换其密钥。先前的密钥会立即且不可逆地撤销。&lt;/li&gt;
&lt;li&gt;身份验证密钥仅显示一次——请复制并妥善保存。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这对现有的用于配置虚拟 Appliance 的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/configuration/appliance/configure-virtual-appliance/#register-a-virtual-appliance-and-generate-a-license-key&quot;&gt;API 和 Terraform 自助服务工作流&lt;/a&gt;进行了补充。硬件 Appliance 继续使用现有的账户团队履行工作流。&lt;/p&gt;
&lt;p&gt;有关详细信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/configuration/appliance/configure-virtual-appliance/&quot;&gt;配置 Cloudflare One 虚拟 Appliance&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><product>Cloudflare One Appliance</product><category>Cloudflare One Appliance</category><category>Cloudflare One</category><category>Cloudflare WAN</category></item><item><title>Durable Objects, Workers - 使用 `exports` 声明 Durable Object 类生命周期</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-declarative-do-class-exports/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-declarative-do-class-exports/</guid><description>&lt;p&gt;Wrangler 配置文件中全新的声明式 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/durable-objects-migrations/&quot;&gt;&lt;code&gt;exports&lt;/code&gt;&lt;/a&gt; 字段取代了用于管理 Durable Object 类生命周期的命令式 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/durable-object-class-migrations-legacy/&quot;&gt;&lt;code&gt;migrations&lt;/code&gt;&lt;/a&gt; 数组。您无需再编写带有唯一标签的有序迁移步骤列表，而是声明 Worker 导出的每个 Durable Object 类，Cloudflare 会将其与已部署的内容进行对比，以确定需要创建、重命名还是删除哪些 Durable Object 状态。&lt;/p&gt;
&lt;p&gt;在使用旧版迁移时，将 &lt;code&gt;ChatRoom&lt;/code&gt; 重命名为 &lt;code&gt;Room&lt;/code&gt; 需要保留这两个标记的步骤：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;Before — legacy migrations&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;jsonc&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;migrations&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;tag&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;v1&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;new_sqlite_classes&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;ChatRoom&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;] },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;tag&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;v2&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;renamed_classes&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;from&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;ChatRoom&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;to&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Room&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;而使用 &lt;code&gt;exports&lt;/code&gt;，您只需将 &lt;code&gt;Room&lt;/code&gt; 声明为当前类，并将 &lt;code&gt;ChatRoom&lt;/code&gt; 标记为已重命名：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;After — declarative exports&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;jsonc&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;exports&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;ChatRoom&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;durable-object&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;state&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;renamed&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;renamed_to&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Room&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;Room&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: { &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;durable-object&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;storage&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;sqlite&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;每个条目都以类名作为键。&lt;code&gt;state&lt;/code&gt; 字段承载生命周期（默认为 &lt;code&gt;created&lt;/code&gt;——活动类——以及墓碑（tombstone）状态 &lt;code&gt;deleted&lt;/code&gt;、&lt;code&gt;renamed&lt;/code&gt;、&lt;code&gt;transferred&lt;/code&gt;，和用于跨 Worker 传输的接收状态 &lt;code&gt;expecting-transfer&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;与旧版 &lt;code&gt;migrations&lt;/code&gt; 数组相比的关键改进：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;无需迁移标签。&lt;/strong&gt; 当前的 &lt;code&gt;exports&lt;/code&gt; 映射是唯一的真实数据源——无需维护 &lt;code&gt;v1&lt;/code&gt;、&lt;code&gt;v2&lt;/code&gt;、&lt;code&gt;v3&lt;/code&gt; 条目的历史链。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;结构化的部署输出。&lt;/strong&gt; Wrangler 会在创建、更新、删除、重命名或传输 Durable Object 类时进行报告。它还会识别可安全删除的陈旧配置条目。没有更改或通知的部署不会打印此输出。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;零停机重命名和传输模式是一等公民。&lt;/strong&gt; 墓碑（Tombstones）可以与代码中仍然存在的源类共存，从而实现 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/durable-objects-migrations/#avoid-downtime-during-a-rename&quot;&gt;三次部署重命名&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/durable-objects-migrations/#transfer-a-durable-object-class-between-workers&quot;&gt;四次部署跨 Worker 传输&lt;/a&gt;，在滚动部署期间不会出现运行时错误。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨 Worker 安全性。&lt;/strong&gt; 当您删除或重命名类时，Cloudflare 会列出您账户中其绑定（binding）仍引用该命名空间的其他所有 Worker，以便您在更改生效前重新部署它们。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用旧版 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/durable-object-class-migrations-legacy/&quot;&gt;&lt;code&gt;migrations&lt;/code&gt;&lt;/a&gt; 数组的现有 Workers 仍可照常工作，无需任何更改。要过渡到 &lt;code&gt;exports&lt;/code&gt;，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/durable-objects-migrations/#migrate-from-the-legacy-migrations-flow&quot;&gt;迁移指南&lt;/a&gt;。在单个 Worker 中，&lt;code&gt;exports&lt;/code&gt; 和 &lt;code&gt;migrations&lt;/code&gt; 是互斥的。&lt;/p&gt;
&lt;p&gt;欲了解完整的参考信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/durable-objects-migrations/&quot;&gt;Durable Object 类导出&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Workers - 借助 @cloudflare/workers-types v5 实现更简单的运行时类型</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-03-workers-types-v5/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-03-workers-types-v5/</guid><description>
&lt;p&gt;我们已经发布了 &lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/workers-types&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;@cloudflare/workers-types&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 的第 5 版。此版本简化了该包，使其仅公开最新的运行时类型。&lt;/p&gt;
&lt;p&gt;我们仍然建议您使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/commands/general/#types&quot;&gt;&lt;code&gt;wrangler types&lt;/code&gt;&lt;/a&gt; 为您的 Worker 生成类型，但如果您想直接使用该包，您可以使用您选择的包管理器进行安装：&lt;/p&gt;
&lt;script&gt;
	if (!customElements.get(&quot;nb-pm-restore&quot;)) {
		customElements.define(
			&quot;nb-pm-restore&quot;,
			class extends HTMLElement {
				connectedCallback() {
					const card = this.closest(&quot;[data-nb-pm]&quot;);
					if (!card) return;
					let saved;
					try {
						saved = sessionStorage.getItem(&quot;ui-pm-tab&quot;);
					} catch {
						return;
					}
					if (!saved) return;
					const tabs = card.querySelectorAll(&quot;[data-nb-pm-tab]&quot;);
					let idx = -1;
					tabs.forEach(function (t, i) {
						if (t.textContent.trim() === saved) idx = i;
					});
					if (idx &lt; 1) return;
					tabs.forEach(function (t, i) {
						t.setAttribute(&quot;aria-selected&quot;, String(i === idx));
					});
					card.querySelectorAll(&quot;[data-nb-pm-panel]&quot;).forEach(function (p, i) {
						p.hidden = i !== idx;
					});
				}
			},
		);
	}
&lt;/script&gt;&lt;div data-nb-pm class=&quot;w-full&quot;&gt;&lt;div class=&quot;flex w-full flex-col overflow-hidden rounded-lg text-sm ring ring-border bg-card&quot;&gt;&lt;div class=&quot;flex items-center gap-2 px-3 py-2 text-[0.8125rem] font-medium leading-5 text-muted-foreground bg-[var(--nb-surface-sunken)]&quot; role=&quot;tablist&quot; aria-label=&quot;Package manager&quot;&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;true&quot; aria-controls=&quot;pm-panel-pm-1fd403bf-9a56-482d-be79-7c47225fb871-npm&quot; id=&quot;pm-tab-pm-1fd403bf-9a56-482d-be79-7c47225fb871-npm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;npm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-1fd403bf-9a56-482d-be79-7c47225fb871-yarn&quot; id=&quot;pm-tab-pm-1fd403bf-9a56-482d-be79-7c47225fb871-yarn&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;yarn&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-1fd403bf-9a56-482d-be79-7c47225fb871-pnpm&quot; id=&quot;pm-tab-pm-1fd403bf-9a56-482d-be79-7c47225fb871-pnpm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;pnpm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-1fd403bf-9a56-482d-be79-7c47225fb871-bun&quot; id=&quot;pm-tab-pm-1fd403bf-9a56-482d-be79-7c47225fb871-bun&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;bun&lt;/button&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-1fd403bf-9a56-482d-be79-7c47225fb871-npm&quot; aria-labelledby=&quot;pm-tab-pm-1fd403bf-9a56-482d-be79-7c47225fb871-npm&quot; data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; i -D @cloudflare/workers-types@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;npm i -D @cloudflare/workers-types@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;symbol id=&quot;ai:ph:copy&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;symbol id=&quot;ai:ph:check&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-1fd403bf-9a56-482d-be79-7c47225fb871-yarn&quot; aria-labelledby=&quot;pm-tab-pm-1fd403bf-9a56-482d-be79-7c47225fb871-yarn&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add -D @cloudflare/workers-types@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;yarn add -D @cloudflare/workers-types@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-1fd403bf-9a56-482d-be79-7c47225fb871-pnpm&quot; aria-labelledby=&quot;pm-tab-pm-1fd403bf-9a56-482d-be79-7c47225fb871-pnpm&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;pnpm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add -D @cloudflare/workers-types@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;pnpm add -D @cloudflare/workers-types@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-1fd403bf-9a56-482d-be79-7c47225fb871-bun&quot; aria-labelledby=&quot;pm-tab-pm-1fd403bf-9a56-482d-be79-7c47225fb871-bun&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;bun&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add -d @cloudflare/workers-types@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;bun add -d @cloudflare/workers-types@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;nb-pm-restore style=&quot;display:contents&quot;&gt;&lt;/nb-pm-restore&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/package-managers/PackageManagers.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;该包现在公开了两个入口点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@cloudflare/workers-types&lt;/code&gt; 反映了最新的兼容性日期，使用最新的稳定兼容性标志。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cloudflare/workers-types/experimental&lt;/code&gt; 反映了处于实验性兼容性标志之下的 API。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;删除了带有日期的入口点，例如 &lt;code&gt;@cloudflare/workers-types/2022-11-30&lt;/code&gt; 和 &lt;code&gt;@cloudflare/workers-types/2023-03-01&lt;/code&gt;。借助 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/&quot;&gt;Wrangler v4&lt;/a&gt; 中的运行时类型生成功能，您可以使用 &lt;code&gt;wrangler types&lt;/code&gt; 命令来生成这些类型，以创建锁定到您的 Worker 兼容日期的类型。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/languages/typescript/&quot;&gt;TypeScript 语言支持&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Search - 使用 Wrangler CLI 管理 AI Search 同步作业</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-manage-sync-jobs/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-manage-sync-jobs/</guid><description>&lt;p&gt;当您将&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/configuration/data-source/&quot;&gt;数据源&lt;/a&gt;连接到您的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; 实例时，AI Search 会运行同步作业以使您的索引与您的内容保持最新。您现在可以直接从 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/wrangler-commands/&quot;&gt;Wrangler&lt;/a&gt; 管理这些作业。&lt;/p&gt;
&lt;p&gt;例如，您可以使用 &lt;code&gt;jobs create&lt;/code&gt; 命令从您的 CI/CD 或自动化流水线触发同步作业，以便在推送更改时刷新索引：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; ai-search&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; jobs&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; create&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-instance&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这将创建一个异步同步作业，该作业会检查数据源中的更改，并发送新增、修改或删除的文件以进行索引。
以下命令可用：&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search jobs create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;触发新的同步作业&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search jobs list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出实例的同步作业&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search jobs get&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;获取作业详情&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search jobs cancel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;取消正在运行的作业&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search jobs logs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;查看作业的日志条目&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;所有命令都接受 &lt;code&gt;--namespace&lt;/code&gt;/&lt;code&gt;-n&lt;/code&gt;（默认为 &lt;code&gt;default&lt;/code&gt;）和 &lt;code&gt;--json&lt;/code&gt;，以输出自动化和 AI 代理可以直接解析的结构化数据。&lt;code&gt;list&lt;/code&gt; 和 &lt;code&gt;logs&lt;/code&gt; 命令还支持用于分页的 &lt;code&gt;--page&lt;/code&gt; 和 &lt;code&gt;--per-page&lt;/code&gt;，并且除非您传递 &lt;code&gt;-y&lt;/code&gt;/&lt;code&gt;--force&lt;/code&gt;，否则 &lt;code&gt;cancel&lt;/code&gt; 会提示确认。&lt;/p&gt;
&lt;p&gt;有关完整的用法详细信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/wrangler-commands/&quot;&gt;AI Search Wrangler 命令文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Cache - 使用 Vary 缓存同一 URL 的多个版本</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-vary-for-cache-rules/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-vary-for-cache-rules/</guid><description>&lt;p&gt;您的源站可以通过返回 &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9110.html#name-vary&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;Vary&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 响应标头，为同一个 URL 提供不同的响应 —— 例如根据 &lt;code&gt;Accept-Language&lt;/code&gt; 提供不同的语言，或者根据 &lt;code&gt;Accept&lt;/code&gt; 提供不同的格式。Cloudflare 的缓存现在直接在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cache/how-to/cache-rules/&quot;&gt;缓存规则（Cache Rules）&lt;/a&gt; 中遵循该标头，因此同一个 URL 可以保存多个缓存版本，并且每个请求都与正确的版本进行匹配。以前必须绕过缓存以保持正确性的内容现在可以被缓存，遵循标准的 &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9111.html#name-calculating-cache-keys-with&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HTTP 缓存行为&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;发生了什么变化&quot;&gt;发生了什么变化&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#发生了什么变化&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;您的源站现在通过在其 &lt;code&gt;Vary&lt;/code&gt; 响应中列出哪些请求标头重要来决定它们，而您则控制 Cloudflare 如何处理每一个。当您使用缓存规则启用了 Vary 且响应包含 &lt;code&gt;Vary&lt;/code&gt; 标头时，列出的请求标头将成为缓存键的一部分。&lt;/p&gt;
&lt;p&gt;对于您的源站变化所依赖的每个标头，选择以下三个操作之一：&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;行为&lt;/th&gt;
&lt;th&gt;最适用于&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;normalize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;在匹配之前将等效的标头值转换为相同的缓存键值，折叠冗余版本。&lt;/td&gt;
&lt;td&gt;大多数 &lt;code&gt;Accept&lt;/code&gt;、&lt;code&gt;Accept-Language&lt;/code&gt; 和 &lt;code&gt;Accept-Encoding&lt;/code&gt; 用例。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;passthrough&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;使用原始标头值选择缓存版本，并将其不作修改地转发到源站。&lt;/td&gt;
&lt;td&gt;当标头值中逐字节的差异应当创建新版本时。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bypass&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;只要此标头名称出现在源站的 &lt;code&gt;Vary&lt;/code&gt; 响应中，就绕过缓存。&lt;/td&gt;
&lt;td&gt;按用户的值，或包含太多可能值以至于无法安全缓存的标头。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;优势&quot;&gt;优势&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#优势&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;更高的缓存命中率&lt;/strong&gt;：&lt;code&gt;normalize&lt;/code&gt; 将语义上等效的标头视为一个版本。例如，&lt;code&gt;Accept-Language: en-US, fr;q=0.8&lt;/code&gt; 和 &lt;code&gt;Accept-Language: fr;q=0.8, en-GB&lt;/code&gt; 都解析为相同的缓存键，因此您可以从缓存而非源站提供更多请求的服务。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;正确的内容协商&lt;/strong&gt;：请求始终接收与其标头相匹配的缓存版本，从而使语言和格式变体保持准确。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;无需更改源站或 Worker&lt;/strong&gt;：如果您的源站已经发送 &lt;code&gt;Vary&lt;/code&gt;，您完全可以在缓存规则（Cache Rules）中配置该行为。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;符合标准&lt;/strong&gt;：缓存键计算遵循 RFC 9111，并且 &lt;code&gt;Vary: *&lt;/code&gt; 像 RFC 9110 要求的那样继续绕过缓存。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;可用性&quot;&gt;可用性&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#可用性&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;缓存规则中的 Vary 适用于所有计划（免费版、专业版、商业版和企业版）。对于 Workers 子请求中的每个请求控制，请使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/runtime-apis/request/#the-cfvary-property&quot;&gt;&lt;code&gt;cf.vary&lt;/code&gt;&lt;/a&gt; 属性。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;开始使用&quot;&gt;开始使用&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#开始使用&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;在 &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/:zone/caching/cache-rules&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare 仪表板&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 的 &lt;strong&gt;Cache（缓存）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Cache Rules（缓存规则）&lt;/strong&gt; 下配置 Vary，或通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ruleset-engine/rulesets-api/&quot;&gt;Rulesets API&lt;/a&gt; 进行配置。要了解 Vary 如何影响缓存键以及每个操作的工作原理，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cache/concepts/vary/&quot;&gt;Vary&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cache/how-to/cache-rules/settings/#vary&quot;&gt;缓存规则 Vary 设置&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Logs - Cloudflare Logs 中多个 Logpush 数据集的字段更新</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-log-fields-updated/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-log-fields-updated/</guid><description>&lt;p&gt;Cloudflare 已更新 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;：&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;现有数据集的字段更新&quot;&gt;现有数据集的字段更新&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#现有数据集的字段更新&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gateway DNS（新增）&lt;/strong&gt;：&lt;code&gt;AppliedMaxTTL&lt;/code&gt; 和 &lt;code&gt;UpstreamRecordTTLs&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gateway HTTP（新增）&lt;/strong&gt;：&lt;code&gt;Warnings&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP requests（新增）&lt;/strong&gt;：&lt;code&gt;CacheLockWaitedMs&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关每个数据集的完整字段定义，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Cloudflare Mesh, Cloudflare One - Cloudflare Mesh 的主机名路由</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-mesh-hostname-routing/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-mesh-hostname-routing/</guid><description>
&lt;p&gt;除了 CIDR 路由之外，您现在还可以向 Cloudflare Mesh 节点添加&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/routes/#hostname-routes&quot;&gt;主机名路由&lt;/a&gt;。&lt;/p&gt;
&lt;figure class=&quot;mesh-hostname-diagram not-content&quot; aria-label=&quot;How hostname routing works with a Cloudflare Mesh node: a client requests a hostname, Cloudflare Gateway assigns a token IP and rewrites the destination, and the Mesh node delivers the traffic to the private host&quot; data-astro-cid-7hjhdnhq&gt;&lt;ol class=&quot;flow&quot; data-astro-cid-7hjhdnhq&gt;&lt;li class=&quot;flow-step&quot; data-astro-cid-7hjhdnhq&gt;&lt;div class=&quot;node-card client-card&quot; data-astro-cid-7hjhdnhq&gt;&lt;div class=&quot;node-header&quot; data-astro-cid-7hjhdnhq&gt;&lt;span class=&quot;node-icon client-icon&quot; aria-hidden=&quot;true&quot; data-astro-cid-7hjhdnhq&gt;&lt;svg width=&quot;0.98em&quot; height=&quot;1em&quot; data-astro-cid-7hjhdnhq=&quot;true&quot; data-icon=&quot;warp-client&quot;&gt;&lt;symbol id=&quot;ai:local:warp-client&quot; viewBox=&quot;0 0 48 49&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M24 5.04a19.5 19.5 0 1 0 19.5 19.5A19.575 19.575 0 0 0 24 5.04m0 3a16.575 16.575 0 0 1 16.5 16.5 16.8 16.8 0 0 1-2.175 8.175c.302-1.125.453-2.285.45-3.45a14.775 14.775 0 0 0-29.55 0 13.2 13.2 0 0 0 .45 3.45A16.8 16.8 0 0 1 7.5 24.54 16.575 16.575 0 0 1 24 8.04m-5.25 30.6a6.974 6.974 0 1 1 10.5 0 5.25 5.25 0 0 0-10.5 0M24 24.015a9.976 9.976 0 0 0-9.975 10.05c-.024.53.026 1.06.15 1.575a11.5 11.5 0 0 1-1.95-6.375 11.775 11.775 0 0 1 23.55 0 11.47 11.47 0 0 1-1.95 6.375 5.6 5.6 0 0 0 .15-1.575A9.974 9.974 0 0 0 24 24.015M21.75 38.79A2.25 2.25 0 1 1 24 41.04a2.174 2.174 0 0 1-2.25-2.25&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:local:warp-client&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;a class=&quot;node-title&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/&quot; data-astro-cid-7hjhdnhq&gt;Client device&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;node-caption&quot; data-astro-cid-7hjhdnhq&gt;Requests &lt;code data-astro-cid-7hjhdnhq&gt;wiki.internal.local&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;flow-connector&quot; data-astro-cid-7hjhdnhq&gt;&lt;span class=&quot;connector-label&quot; data-astro-cid-7hjhdnhq&gt;DNS query&lt;/span&gt;&lt;span class=&quot;connector-arrow&quot; aria-hidden=&quot;true&quot; data-astro-cid-7hjhdnhq&gt;↓&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;flow-step&quot; data-astro-cid-7hjhdnhq&gt;&lt;div class=&quot;node-card gateway-card&quot; data-astro-cid-7hjhdnhq&gt;&lt;div class=&quot;node-header&quot; data-astro-cid-7hjhdnhq&gt;&lt;span class=&quot;node-icon gateway-icon&quot; aria-hidden=&quot;true&quot; data-astro-cid-7hjhdnhq&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; data-astro-cid-7hjhdnhq=&quot;true&quot; data-icon=&quot;gateway&quot;&gt;&lt;symbol id=&quot;ai:local:gateway&quot; viewBox=&quot;0 0 16 16&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M15.45 7.125h-2.577V3.508l-.41-.408H3.925l-.41.41v3.08h.922V4.023h7.513v7.555H4.438v-1.553h-.923v2.065l.41.41h8.538l.41-.41V8.048H16z&quot;/&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8.453 7.238H0l.517.87H8.97zM9.21 8.51H.755l.517.868h8.453z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:local:gateway&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;a class=&quot;node-title&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot; data-astro-cid-7hjhdnhq&gt;Cloudflare Gateway&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;node-caption&quot; data-astro-cid-7hjhdnhq&gt;Returns a token IP, then rewrites the destination to the real private IP.&lt;/p&gt;&lt;div class=&quot;pill-row&quot; data-astro-cid-7hjhdnhq&gt;&lt;span class=&quot;token-pill&quot; data-astro-cid-7hjhdnhq&gt;&lt;code data-astro-cid-7hjhdnhq&gt;100.80.0.0/16&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;flow-connector&quot; data-astro-cid-7hjhdnhq&gt;&lt;a class=&quot;connector-label&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/routes/#hostname-routes&quot; data-astro-cid-7hjhdnhq&gt;Hostname route&lt;/a&gt;&lt;span class=&quot;connector-arrow&quot; aria-hidden=&quot;true&quot; data-astro-cid-7hjhdnhq&gt;↓&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;flow-step&quot; data-astro-cid-7hjhdnhq&gt;&lt;div class=&quot;node-card mesh-card&quot; data-astro-cid-7hjhdnhq&gt;&lt;div class=&quot;node-header&quot; data-astro-cid-7hjhdnhq&gt;&lt;span class=&quot;node-icon mesh-icon&quot; aria-hidden=&quot;true&quot; data-astro-cid-7hjhdnhq&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; data-astro-cid-7hjhdnhq=&quot;true&quot; data-icon=&quot;cloudflare-mesh&quot;&gt;&lt;symbol id=&quot;ai:local:cloudflare-mesh&quot; viewBox=&quot;0 0 32 32&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M10 6a2 2 0 1 1-4 0 2 2 0 0 1 4 0m6-2a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8 4a2 2 0 1 0 0-4 2 2 0 0 0 0 4M8 11a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4M8 18a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4m0 7a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8-7a2 2 0 1 0 0 4 2 2 0 0 0 0-4&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:local:cloudflare-mesh&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;a class=&quot;node-title&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot; data-astro-cid-7hjhdnhq&gt;Mesh node&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;node-caption&quot; data-astro-cid-7hjhdnhq&gt;Forwards traffic to the host on the local network&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;flow-connector&quot; aria-hidden=&quot;true&quot; data-astro-cid-7hjhdnhq&gt;&lt;span class=&quot;connector-arrow&quot; data-astro-cid-7hjhdnhq&gt;↓&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;flow-step&quot; data-astro-cid-7hjhdnhq&gt;&lt;div class=&quot;node-card host-card&quot; data-astro-cid-7hjhdnhq&gt;&lt;div class=&quot;node-header&quot; data-astro-cid-7hjhdnhq&gt;&lt;span class=&quot;node-icon host-icon&quot; aria-hidden=&quot;true&quot; data-astro-cid-7hjhdnhq&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; data-astro-cid-7hjhdnhq=&quot;true&quot; data-icon=&quot;dns&quot;&gt;&lt;symbol id=&quot;ai:local:dns&quot; viewBox=&quot;0 0 48 48&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M39 30.98h-2.125v-8.574H25.148v-5.449h2.102l1.25-1.25V9l-1.25-1.25h-6.738L19.262 9v6.707l1.25 1.25h2.136v5.45H11.125v8.573H9l-1.25 1.25V39L9 40.25h6.742l1.25-1.25v-6.77l-1.25-1.25h-2.117v-6.074h9.023v6.074h-2.136l-1.25 1.25V39l1.25 1.25h6.738L28.5 39v-6.77l-1.25-1.25h-2.102v-6.074h9.235v6.074h-2.121l-1.25 1.25V39l1.25 1.25H39L40.25 39v-6.77ZM21.762 10.25H26v4.238h-4.238Zm-7.27 27.5H10.25v-4.27h4.238Zm11.508 0h-4.238v-4.27H26Zm11.75 0h-4.238v-4.27h4.238Z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:local:dns&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;span class=&quot;node-title&quot; data-astro-cid-7hjhdnhq&gt;Private host&lt;/span&gt;&lt;/div&gt;&lt;p class=&quot;node-caption&quot; data-astro-cid-7hjhdnhq&gt;&lt;code data-astro-cid-7hjhdnhq&gt;wiki.internal.local&lt;/code&gt; · &lt;code data-astro-cid-7hjhdnhq&gt;10.0.0.50&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/figure&gt;
&lt;p&gt;您可以通过将主机名的流量引导到 Mesh 节点来代替管理 IP 范围：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;私有主机名&lt;/strong&gt;（例如 &lt;code&gt;wiki.internal.local&lt;/code&gt;）—— 通过名称访问内部应用程序，这在它具有未知或临时 IP 时非常有用。在 Mesh 上，您不需要运行 DNS 服务器；只需节点上的本地 hosts 文件条目即可，或者您可以使用 Gateway 解析器策略进行 split DNS。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;公共主机名&lt;/strong&gt;（例如 &lt;code&gt;www.example.com&lt;/code&gt;）—— 通过该节点路由该主机名的流量，并经由该节点的公共 IP 出站。&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/mesh&quot; data-nb-button class=&quot;group inline-flex w-max shrink-0 items-center justify-center rounded-full font-medium whitespace-nowrap no-underline shadow-xs transition-colors cursor-pointer select-none focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary-hover h-9 gap-1.5 px-3 text-sm&quot; target=&quot;_blank&quot;&gt;Go to &lt;strong&gt;Mesh&lt;/strong&gt;&amp;nbsp;&amp;#8599;&lt;/a&gt;
&lt;p&gt;有关设置步骤、先决条件和 DNS 选项，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/routes/#hostname-routes&quot;&gt;主机名路由&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><product>Cloudflare Mesh</product><category>Cloudflare Mesh</category><category>Cloudflare One</category></item><item><title>Workers - 使用 Wrangler 身份验证配置文件（auth profiles）跨多个账户工作</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-wrangler-auth-profiles/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-02-wrangler-auth-profiles/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/&quot;&gt;Wrangler CLI&lt;/a&gt; 现在支持身份验证配置文件（auth profiles）：命名登录，您可以将其范围限制为特定的 Cloudflare 账户，并根据您正在工作的目录自动在它们之间进行切换。&lt;/p&gt;
&lt;p&gt;配置文件（profile）是绑定到目录的命名 OAuth 登录。在该目录及其子目录中运行的命令将使用匹配的账户 —— 这样您就可以在账户之间切换，而无需重新运行 &lt;code&gt;wrangler login&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;当您在代理机构工作时，使用配置文件为每个客户保留单独的登录，或者将暂存（staging）和生产（production）环境分隔到不同的账户中。在您的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/configuration/&quot;&gt;Wrangler 配置文件&lt;/a&gt; 中将配置文件与 &lt;code&gt;account_id&lt;/code&gt; 配对，这样命令就不会访问到错误的账户。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# 为每个账户创建一个配置文件，选择它能访问的账户&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; auth&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; create&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; client-a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; auth&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; activate&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; client-a&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; ~/clients/client-a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; auth&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; create&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; client-b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; auth&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; activate&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; client-b&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; ~/clients/client-b&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;使用 &lt;code&gt;--profile&lt;/code&gt; 标志以特定配置文件运行单个命令：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; deploy&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --profile&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; personal&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;在 CI 和其他自动化环境中，&lt;code&gt;CLOUDFLARE_API_TOKEN&lt;/code&gt; 仍然优先于所有配置文件。&lt;/p&gt;
&lt;p&gt;有关设置、解析顺序和完整命令参考，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/profiles/&quot;&gt;身份验证配置文件（Authentication profiles）&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Linux (version 2026.6.836.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-warp-linux-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This package is the same release as 2026.6.822.0, with a fix for our RPM package. Previously the repository served a single build to every OS version, so an install could pull a dependency that isn&amp;#39;t available on that release. The repository now serves the correct build for each operating system version, so installs automatically pull the dependencies that version requires. Debian and Ubuntu were not affected.&lt;/p&gt;
&lt;p&gt;If you installed version 2026.6.822.0 on an RPM-based distribution, we recommend refreshing your repository configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo curl -fsSL https://pkg.cloudflareclient.com/cloudflare-warp-ascii.repo | sudo tee /etc/yum.repos.d/cloudflare-warp.repo
sudo dnf clean all
sudo dnf install cloudflare-warp
&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Wed, 01 Jul 2026 19:48:17 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Access - 修复单页应用程序的重定向 URL 片段（fragment）编码</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-spa-redirect-fragment-fix/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-spa-redirect-fragment-fix/</guid><description>&lt;p&gt;Access 现在在登录后将用户重定向回应用程序时，能够正确保留 URL 片段（fragment）字符（&lt;code&gt;/&lt;/code&gt;、&lt;code&gt;?&lt;/code&gt;、&lt;code&gt;=&lt;/code&gt;、&lt;code&gt;&amp;amp;&lt;/code&gt;、&lt;code&gt;;&lt;/code&gt;）。以前，这些字符是使用 &lt;code&gt;encodeURIComponent&lt;/code&gt; 进行编码的，这会破坏单页应用程序（SPA）使用的基于片段的路由。&lt;/p&gt;
&lt;p&gt;例如，像 &lt;code&gt;https://app.example.com/#/dashboard?tab=settings&amp;amp;view=advanced&lt;/code&gt; 这样的 SPA URL 以前在登录后会重定向到一个损坏的 URL。这现在已得到正确处理。&lt;/p&gt;
&lt;p&gt;如果您的 SPA 用户在通过 Access 进行身份验证后遇到导航损坏的问题，此修复将解决该问题，而无需进行任何配置更改。&lt;/p&gt;</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Access - 用于基础设施应用程序的独立 MFA</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-ssh-mfa-piv-keys/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-ssh-mfa-piv-keys/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/applications/non-http/infrastructure-apps/&quot;&gt;Access for Infrastructure&lt;/a&gt; 现在支持使用 YubiKey PIV 密钥对 SSH 连接实施独立多因素身份验证（MFA）。这为 SSH 访问添加了基于硬件的第二因素，确保仅凭受损的设备会话不足以访问您的服务器。&lt;/p&gt;
&lt;p&gt;通过针对每个应用程序和每个策略的配置，您可以对敏感用户名（例如 &lt;code&gt;root&lt;/code&gt;）强制执行 PIV 密钥身份验证，同时对其他用户名应用不同的要求。您还可以设置 MFA 会话时长，以控制用户必须重新进行身份验证的频率。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;注册&quot;&gt;注册&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#注册&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;用户通过&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/access-settings/app-launcher/&quot;&gt;应用程序启动器&lt;/a&gt;注册其 YubiKey PIV 密钥。有关注册说明和 SSH 客户端设置，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/access-settings/independent-mfa/#enroll-a-piv-key-for-infrastructure-apps&quot;&gt;为基础设施应用程序注册 PIV 密钥&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;配置&quot;&gt;配置&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#配置&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;有关设置说明，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/policies/mfa-requirements/#infrastructure-applications&quot;&gt;为基础设施应用程序强制执行 MFA&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Bots - 用于管理 AI 流量的新选项</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-ai-traffic-options/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-ai-traffic-options/</guid><description>&lt;p&gt;并非所有 AI 流量都是相同的。现在，所有客户（包括使用免费计划的客户）都可以根据 AI 爬虫在您网站上的实际行为来对其进行管理。Cloudflare 将 AI 流量归类为三种行为，您可以对其进行独立控制：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/bots/concepts/bot/#ai-bots&quot;&gt;搜索 (Search)、代理 (Agent) 和训练 (Training)&lt;/a&gt;。这可以让您保留为您带来读者和收入的自动化流量，同时屏蔽那些只获取您内容的流量。&lt;/p&gt;
&lt;p&gt;每种行为都对应一个真实的用例。&lt;strong&gt;Search（搜索）&lt;/strong&gt; 涵盖了对您的内容进行索引以便稍后回答相关问题的爬虫，您可以期望从中获得引流流量或其他公平的补偿。&lt;strong&gt;Agent（代理）&lt;/strong&gt; 涵盖代表个人实时操作的自动化活动，例如聊天获取机器人和浏览器使用代理。&lt;strong&gt;Training（训练）&lt;/strong&gt; 涵盖获取您的内容以训练或微调模型的爬虫。对于每个预设，您可以选择在所有页面上屏蔽、仅在展示广告的页面上屏蔽，或选择不屏蔽。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/ai-bot-traffic-policies.BqXU7Gmv_Z24E74g.webp&quot; alt=&quot;配置 AI 机器人流量策略屏幕，其中可以分别将搜索 (Search)、代理 (Agent) 和训练 (Training) 设置为允许、屏蔽或仅在有广告的页面上屏蔽&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4720&quot; height=&quot;2966&quot;&gt;
&lt;p&gt;自 &lt;strong&gt;2026 年 9 月 15 日&lt;/strong&gt;起，新接入 Cloudflare 的域将获得更新的默认值：被归类为“Training（训练）”或“Agent（代理）”的机器人在显示广告的页面上将被屏蔽，而&lt;strong&gt;Search（搜索）&lt;/strong&gt; 将保持允许状态。届时，结合了搜索和训练的通用爬虫将受到新的“Block Training（屏蔽训练）”默认值的影响。所有客户都可以在 9 月 15 日之前的任何时间&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/:zone/security/settings&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;选择退出新的默认值&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><product>Bots</product><category>Bots</category></item><item><title>Bots - 通过 BotBase 和 Attribution Business Insights 提高对机器人流量的可见性</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-botbase-attribution-business-insights/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-botbase-attribution-business-insights/</guid><description>&lt;p&gt;随着 2026 年内容独立日（Content Independence Day 2026）的到来，&lt;a href=&quot;https://cloudflaredoc.ubitools.com/bots/get-started/bot-management/&quot;&gt;Enterprise Bot Management&lt;/a&gt; 客户获得了两个全新工具，使机器人流量更容易被查看和分析：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/bots/botbase/&quot;&gt;BotBase&lt;/a&gt;（Cloudflare 跟踪的每个机器人的可搜索目录）以及 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/bots/attribution-business-insights/&quot;&gt;Attribution Business Insights&lt;/a&gt;（显示每个爬虫为您的业务带来的价值的仪表板）。&lt;/p&gt;
&lt;p&gt;BotBase 是 Cloudflare 所有已知机器人和代理的目录，可直接在仪表板中访问。它显示了 Cloudflare 如何根据行为对每个机器人进行分类——Search、Agent、Training，以及其他类别（例如 Transact、Data Collection、SEO 和 Ads Verification）——以便您了解特定爬虫访问您的原因。您可以搜索和筛选完整的目录，将您自己的流量筛选到单个机器人以调查其在您的区域 (zone) 上的活动，并复制任何机器人的检测 ID 以在&lt;a href=&quot;https://cloudflaredoc.ubitools.com/security/rules/&quot;&gt;安全规则 (Security rules)&lt;/a&gt; 中对其进行精准定位。BotBase 中每个被跟踪的机器人也会发布在 &lt;a href=&quot;https://radar.cloudflare.com/bots/directory&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Radar 的机器人和代理目录&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;中。&lt;/p&gt;
&lt;p&gt;Attribution Business Insights 专为内容所有者和业务决策者设计，使他们无需阅读规则语法即可了解哪些机器人对业务有益或有害。该仪表板会报告整个网站和每个机器人运营商在过去 24 小时、7 天或 30 天内的抓取与引流比例——将公司抓取您内容的频率与其实际引流回来的访问者数量进行对比。每个运营商都贴有 Cloudflare &lt;a href=&quot;https://cloudflaredoc.ubitools.com/bots/concepts/bot/verified-bots/&quot;&gt;更新的分类&lt;/a&gt;标签，以及“已允许 (Allowed)”、“已屏蔽 (Blocked)”或“部分屏蔽 (Partially blocked)”的操作状态，让利益相关者能够共享并一目了然地查看到达您网站的 AI 流量。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/attribution-business-insights.Cu-ZtxkX_1SkuMS.webp&quot; alt=&quot;Attribution Business Insights 仪表板，显示机器人流量、内容页面请求、抓取与引流比例以及每个运营商的机器人活动表&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;8192&quot; height=&quot;5064&quot;&gt;</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><product>Bots</product><category>Bots</category></item><item><title>Containers - 在 Containers 中使用 Google Artifact Registry 镜像</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-google-artifact-registry-images/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-google-artifact-registry-images/</guid><description>
&lt;p&gt;Containers 现在支持 &lt;a href=&quot;https://cloud.google.com/artifact-registry&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Google Artifact Registry&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 镜像。配置凭据后，您可以在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/configuration/#containers&quot;&gt;Wrangler 配置&lt;/a&gt;中使用完全限定的 Google Artifact Registry 镜像引用，而无需先将镜像推送到 Cloudflare Registry。&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;--gar-email&lt;/code&gt; 提供服务账户电子邮件，并通过 &lt;code&gt;stdin&lt;/code&gt; 用管道传输服务账户 JSON 密钥：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;cat&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;PATH_TO_KE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; |&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; containers&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; registries&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; configure&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;REGIO&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;-docker.pkg.dev&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --gar-email=&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;SERVICE_ACCOUNT_EMAIL&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --secret-name=&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;SECRET_NAME&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;$schema&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;containers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;image&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;REGION&gt;-docker.pkg.dev/&amp;#x3C;PROJECT_ID&gt;/&amp;#x3C;REPOSITORY&gt;/&amp;#x3C;IMAGE&gt;:&amp;#x3C;TAG&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# 示例: us-central1-docker.pkg.dev/my-project/my-repo/my-image:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;image = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;REGION&gt;-docker.pkg.dev/&amp;#x3C;PROJECT_ID&gt;/&amp;#x3C;REPOSITORY&gt;/&amp;#x3C;IMAGE&gt;:&amp;#x3C;TAG&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;仅支持 &lt;code&gt;*-docker.pkg.dev&lt;/code&gt; 主机。要配置凭据，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/platform-details/image-management/#use-private-google-artifact-registry-images&quot;&gt;使用私有 Google Artifact Registry 镜像&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/platform-details/image-management/&quot;&gt;镜像管理&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Cloudflare Images - Images 绑定现按唯一转换计费</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-binding-unique-transformations/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-binding-unique-transformations/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/binding/&quot;&gt;Images 绑定（binding）&lt;/a&gt;现在按唯一转换计费，这与已用于基于 URL 转换的计费模型一致。在同一个日历月内对相同源图像和参数组合的重复请求仅计算一次。&lt;/p&gt;
&lt;p&gt;在此之前，无论图像或参数是否唯一，对绑定的每次调用都被计为一次单独的转换。有了这项改进，您可以在热点路径上调用绑定，而无需为每个单独的请求付费。&lt;/p&gt;
&lt;p&gt;对 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/binding/#infostream&quot;&gt;&lt;code&gt;.info()&lt;/code&gt;&lt;/a&gt; 的调用不再计费。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/pricing/#images-transformed&quot;&gt;Images 定价&lt;/a&gt;和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/binding/&quot;&gt;Images 绑定文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><product>Cloudflare Images</product><category>Cloudflare Images</category></item><item><title>Vectorize - 降低向量变更的端到端延迟</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-improved-wal-throughput/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-improved-wal-throughput/</guid><description>&lt;p&gt;我们大幅提升了 Vectorize &lt;a href=&quot;https://blog.cloudflare.com/building-vectorize-a-distributed-vector-database-on-cloudflare-developer-platform/#the-wal&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;预写日志（WAL）&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;的吞吐量。因此，向量变更变为可查询的端到端延迟显著降低：中位延迟从 2 分钟降至 30 秒以内，p99 延迟从 5 分钟降至 2 分钟以内。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/vectorize-p99-wal-batch-end-to-end-latency-improvement.k8gtzlG7_Z21AKmQ.webp&quot; alt=&quot;Vectorize p99 WAL 批次端到端延迟改善&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2542&quot; height=&quot;1184&quot;&gt;
&lt;p&gt;这意味着插入、upsert 和删除操作将更快地反映在查询结果中，提升语义搜索、推荐和检索增强生成（RAG）工作负载的数据新鲜度。您无需更改代码或配置即可受益于此改进。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/vectorize/&quot;&gt;Vectorize 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><product>Vectorize</product><category>Vectorize</category></item><item><title>WAF - WAF 发布 - 2026-07-01</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-07-01-waf-release/</guid><description>
&lt;p&gt;此版本增加了针对 Fortinet FortiSandbox 中路径遍历缺陷（CVE-2026-39813）的针对性覆盖，并将 Anomaly:Header:User-Agent - Fake Bing or MSN Bot 规则操作从阻断转换为已禁用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2026-39813: Fortinet FortiSandbox 中的路径遍历漏洞，由于对用户输入的路径验证不足，允许远程、未经身份验证的攻击者从底层文件系统中读取任意文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;32075e19b1494117ac5915e8d84c92c9&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...d84c92c9&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Fortinet FortiSandbox - Path Traversal - CVE:CVE-2026-39813&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;ae20608d93b94e97988db1bbc12cf9c8&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...c12cf9c8&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Anomaly:Header:User-Agent - Fake Bing or MSN Bot&lt;/td&gt;&lt;td&gt;已启用&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt;&lt;p&gt;我们将此规则的操作从阻断更改为已禁用。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Gateway, Cloudflare One, Cloudflare Fundamentals - Gateway 策略和列表的新权限与角色</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-gateway-granular-permissions/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-gateway-granular-permissions/</guid><description>&lt;p&gt;您现在可以为 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot;&gt;Cloudflare Gateway&lt;/a&gt; 防火墙策略和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/reusable-components/lists/&quot;&gt;Zero Trust 列表&lt;/a&gt;分配细粒度的资源作用域角色。管理员可以委派对特定策略类型或列表管理的访问权限，而无需授予账户范围或产品范围的控制权。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新增功能&quot;&gt;新增功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新增功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;当您&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/manage-members/manage/&quot;&gt;添加成员&lt;/a&gt;或创建&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/manage-members/policies/&quot;&gt;权限策略&lt;/a&gt;时，现在可以使用以下资源作用域角色：&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;角色&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Gateway Firewall Policies Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑所有 Gateway 防火墙策略，包括 DNS、HTTP 和网络策略。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Gateway DNS Policies Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑 Gateway DNS 策略。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Gateway HTTP Policies Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑 Gateway HTTP 策略。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Gateway Network Policies Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑 Gateway 网络策略。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Gateway Egress Policies Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑 Gateway 出口策略。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Gateway Resolver Policies Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑 Gateway 解析器策略。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Gateway Policies Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑所有 Gateway 策略。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Gateway Policies Read&lt;/td&gt;
&lt;td&gt;可以查看所有 Gateway 策略。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Gateway Read Only&lt;/td&gt;
&lt;td&gt;可以查看所有 Gateway 资源。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust DNS Locations Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑 DNS 位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Proxy Endpoints Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑 Gateway 代理端点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Account Lists Admin&lt;/td&gt;
&lt;td&gt;可以查看和编辑所有 Gateway 和 Access 列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero Trust Account Lists Read&lt;/td&gt;
&lt;td&gt;可以查看所有 Gateway 和 Access 列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;这些角色允许您：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仅向网络工程师授予网络策略的写入权限，而不暴露 DNS 或 HTTP 策略配置。&lt;/li&gt;
&lt;li&gt;允许安全分析师以只读模式查看所有 Gateway 策略以进行审计。&lt;/li&gt;
&lt;li&gt;将列表管理委托给维护阻止和允许列表的团队，而不授予他们访问策略配置的权限。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您现在还可以分配 &lt;em&gt;资源作用域角色&lt;/em&gt;。这些角色是对现有账户级别角色的补充，允许您授予对特定资源（例如单个 Gateway 策略或 Cloudflare One 列表）的访问权限。&lt;strong&gt;现有的账户级别角色继续有效。&lt;/strong&gt; 拥有 &lt;code&gt;Cloudflare Gateway&lt;/code&gt; 或 &lt;code&gt;Cloudflare Zero Trust&lt;/code&gt; 角色的成员将保留对所有 Gateway 资源的完全访问权限。这确保了与现有自动化和 API 令牌的向后兼容性。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;快速入门&quot;&gt;快速入门&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#快速入门&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;查看 Cloudflare 角色参考上的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/manage-members/roles/#resource-scoped-roles&quot;&gt;资源作用域角色&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;了解如何&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/manage-members/policies/&quot;&gt;创建使用这些角色的权限策略&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category><category>Cloudflare One</category><category>Cloudflare Fundamentals</category></item><item><title>Logs - Logpush 中的账户范围防火墙事件数据集</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-account-level-firewall-events/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-account-level-firewall-events/</guid><description>&lt;p&gt;Cloudflare Logpush 现在支持&lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/account/firewall_events/&quot;&gt;防火墙事件作为账户范围数据集&lt;/a&gt;。在账户级别配置一个 Logpush 任务，即可接收账户中每个区域的防火墙事件，而无需为每个区域单独创建和维护任务。&lt;/p&gt;
&lt;p&gt;该数据集包含一个新的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/account/firewall_events/#zonename&quot;&gt;&lt;code&gt;ZoneName&lt;/code&gt;&lt;/a&gt; 字段，以便您在下游管道中处理日志时识别每个事件来自哪个区域。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;可用功能&quot;&gt;可用功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#可用功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;新的账户范围 &lt;code&gt;firewall_events&lt;/code&gt; 数据集，可通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/logpush/subresources/jobs/&quot;&gt;Logpush API&lt;/a&gt; 或 Cloudflare 仪表板进行配置。&lt;/li&gt;
&lt;li&gt;与现有&lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/zone/firewall_events/&quot;&gt;区域范围防火墙事件数据集&lt;/a&gt;相同的字段和过滤表达式，另加新的 &lt;code&gt;ZoneName&lt;/code&gt; 字段。&lt;/li&gt;
&lt;li&gt;支持所有现有的 Logpush 目标。&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Workers, Durable Objects - 在仪表板中跟踪 Workers 和 Durable Objects 的内存使用情况</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-memory-usage-metrics/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-30-memory-usage-metrics/</guid><description>&lt;p&gt;您现在可以使用 Workers 指标（Metrics）选项卡中新增的 &lt;strong&gt;Memory Usage（内存使用情况）&lt;/strong&gt; 图表，监控您的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/&quot;&gt;Workers&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt; 在多次调用中消耗了多少内存，图表按 P50、P90、P99 和 P999 百分位数进行了细分。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/2026-06-26-memory-usage.B20y2uNp_2e7cPL.webp&quot; alt=&quot;内存使用情况图表显示了带有部署标记的 P50、P90、P99 和 P999 百分位数&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1210&quot; height=&quot;782&quot;&gt;
&lt;p&gt;内存使用情况测量的是每次调用时的 V8 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/reference/how-workers-works/#isolates&quot;&gt;isolate&lt;/a&gt; 内存，受限于 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/platform/limits/#memory&quot;&gt;每个 isolate 128 MB 的限制&lt;/a&gt; —— 单个 isolate 可以处理许多并发请求并在它们之间共享内存。&lt;/p&gt;
&lt;p&gt;使用内存使用情况图表可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;跟踪内存趋势&lt;/strong&gt; —— 在导致 &lt;code&gt;Exceeded Memory&lt;/code&gt;（超出内存）错误之前，发现可能表明存在内存泄漏的渐进式内存增加。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;与部署关联&lt;/strong&gt; —— 图表上的部署标记可帮助您确定新版本是否引入了内存回归。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;合理调整您的 Worker 规模&lt;/strong&gt; —— 了解您的基准内存占用量，以及在达到 128 MB 限制之前您还有多少余量。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于 Durable Objects，内存使用情况反映了对象保存的内存中状态（类属性、缓存、活动的 WebSocket 连接），该状态在多次调用之间保持不变，直到对象被&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/concepts/durable-object-lifecycle/&quot;&gt;休眠或逐出&lt;/a&gt;。在逐出、休眠或崩溃时，此状态不会保留，因此请将任何重要内容持久化保存到&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/best-practices/access-durable-objects-storage/&quot;&gt;存储&lt;/a&gt;中。&lt;/p&gt;
&lt;p&gt;要查看内存使用情况，请打开您的 &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/services/view/:worker/production/metrics&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Worker&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 或 &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/durable-objects&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Durable Object 命名空间&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 的 &lt;strong&gt;Metrics（指标）&lt;/strong&gt; 选项卡。对于 Durable Objects，您可以按 DO ID 或名称进行过滤，以深入查看特定对象的内存使用情况。您还可以通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/analytics/graphql-api/tutorials/querying-workers-metrics/&quot;&gt;GraphQL Analytics API&lt;/a&gt; 使用 &lt;code&gt;workersInvocationsAdaptive&lt;/code&gt; 数据集以编程方式查询内存使用情况 —— 从 &lt;code&gt;quantiles.memoryUsageBytesP50&lt;/code&gt; 到 &lt;code&gt;quantiles.memoryUsageBytesP999&lt;/code&gt; 的字段以字节为单位返回百分位数。&lt;/p&gt;
&lt;p&gt;对于本地内存调试，您还可以&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/observability/dev-tools/memory-usage/&quot;&gt;使用 DevTools 剖析内存&lt;/a&gt;以获取堆快照并识别导致高内存占用的特定对象。&lt;/p&gt;</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Durable Objects</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Windows (version 2026.6.822.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-29-warp-windows-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-29-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces multiple features from our previous beta release into stable release, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The client now applies DNS search suffixes configured in your &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/device-profiles&quot;&gt;device profile&lt;/a&gt; / &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/network-policies&quot;&gt;network policy&lt;/a&gt;. Administrators can push a list of DNS search domains that the client appends to single-label queries, alongside any system-configured suffixes. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#dns-search-suffixes&quot;&gt;DNS search suffixes&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Added mandatory authentication. When enabled via MDM, the Cloudflare One Client blocks all Internet traffic from the moment the machine boots until the user authenticates, closing the visibility gap on newly deployed devices and during re-authentication. See the &lt;a href=&quot;https://blog.cloudflare.com/mandatory-authentication-mfa/&quot;&gt;announcement blog&lt;/a&gt; and &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/windows-no-auth-no-internet/&quot;&gt;documentation&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Upgraded security of device registration to be hardware-backed. Registration tokens can now be generated in the TPM (with TPM 2.0+) whenever it is available to provide stronger protection against device impersonation. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/hardware-backed-registration/&quot;&gt;Hardware-backed registration&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Added a local-file signal source for Emergency Disconnect. In addition to the existing HTTPS polling mechanism, administrators can now configure WARP to monitor for a file on disk; the presence of the file triggers an emergency disconnect even if both Cloudflare and your own infrastructure are unreachable. Either signal being asserted triggers disconnect; both must be cleared for normal operation to resume.&lt;/li&gt;
&lt;li&gt;Added new warp-cli debug commands for interactive connection diagnosis. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs/#extra-debug-logging&quot;&gt;Extra debug logging&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;The local DNS proxy now supports DNSSEC passthrough. DNSSEC-signed responses are forwarded to the application intact (including DO/AD bits and RRSIG records), so applications that validate DNSSEC locally — including resolvers and the dig/drill tooling — work correctly through the client.&lt;/li&gt;
&lt;li&gt;Added a new MDM format for organization-wide settings, including a cleaner way to configure the compliance environment (e.g. FedRAMP). The previous per-configuration approach still works, but the new format is now recommended. See the updated &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#organization_configs&quot;&gt;Cloudflare One MDM documentation&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Added support for dashboard-managed client version deployments. Administrators can now upgrade or downgrade the client version on enrolled devices directly from the Zero Trust dashboard. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/client-version-assignments/&quot;&gt;Client version assignments&lt;/a&gt; for details.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Additional Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Starting with 2026.6.822.0, the client unifies all API requests under the &lt;code&gt;api.devices.cloudflare.com&lt;/code&gt; SNI, where previously both &lt;code&gt;zero-trust-client.cloudflareclient.com&lt;/code&gt; and &lt;code&gt;notifications.cloudflareclient.com&lt;/code&gt; were used. Review &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/&quot;&gt;Cloudflare One Client with firewall&lt;/a&gt; to ensure systems that rely on SNI inspection do not block the API traffic. The behavior of previous client versions is unaffected.&lt;/li&gt;
&lt;li&gt;Client Certificate device-posture checks now support template variables (e.g. &lt;code&gt;${serial_number}&lt;/code&gt;, &lt;code&gt;${device_uuid}&lt;/code&gt;) in the Subject Alternative Name field. Previously only the Common Name field accepted variables, which broke posture rules that pinned identity to a SAN entry.&lt;/li&gt;
&lt;li&gt;Improved accessibility by using high contrast colors and more defined color boundaries when high contrast is enabled in Windows Accessibility settings.&lt;/li&gt;
&lt;li&gt;Path MTU Discovery (PMTUD) is now enabled by default.&lt;/li&gt;
&lt;li&gt;The UseWebView2 registry value (HKLM\SOFTWARE\Cloudflare\CloudflareWARP\UseWebView2 = y) is once again honored by the new GUI for authentication, so administrators who prefer the embedded WebView2 browser for sign-in can opt back in. This setting was effectively ignored in the previous release; the default browser was always used. This key is now also honored for re-authentications.&lt;/li&gt;
&lt;li&gt;Fixed a crash in the authentication browser when navigating to a site that prompts for browser permissions (microphone, camera, notifications, etc.). The same fix had previously landed for the captive-portal browser; this extends it to the auth browser.&lt;/li&gt;
&lt;li&gt;Fixed an issue in proxy mode where hostnames containing underscores (e.g. ai_app.com) were rejected, breaking apps that depend on such hostnames (notably ChatGPT sandbox apps). The local proxy now accepts underscore-containing hostnames in CONNECT requests.&lt;/li&gt;
&lt;li&gt;Fixed an issue where DNS queries would fail after the connection was idle, requiring users to retry.&lt;/li&gt;
&lt;li&gt;Fixed a high CPU issue when the device wakes from sleep.&lt;/li&gt;
&lt;li&gt;Users can now register with team names in any case format without errors.&lt;/li&gt;
&lt;li&gt;New UI fixes&lt;ul&gt;
&lt;li&gt;Fixed an issue where users with invalid MDM configurations were returned to the onboarding screen after successful authentication.&lt;/li&gt;
&lt;li&gt;Added a re-auth button and banner to the home screen so users don&amp;#39;t miss it when their session expires.&lt;/li&gt;
&lt;li&gt;Added clear error messaging when the Cloudflare certificate needs to be installed.&lt;/li&gt;
&lt;li&gt;Brought back support for pausing the tunnel when connected to user-specified Wi-Fi networks for consumer users.&lt;/li&gt;
&lt;li&gt;New client UI now surfaces Split tunnel configuration and Local Domain Fallback configuration.&lt;/li&gt;
&lt;li&gt;Added ability to configure proxy mode for consumer users.&lt;/li&gt;
&lt;li&gt;Added back the option to quit for consumer users.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single sign-on in the embedded WebView2 authentication browser may fail to use the Windows primary account, prompting for an interactive sign-in.&lt;/li&gt;
&lt;li&gt;An error indicating that Microsoft Edge can&amp;#39;t read and write to its data directory may be displayed during captive portal login; this error is benign and can be dismissed.&lt;/li&gt;
&lt;li&gt;In rare cases, a registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;Windows ARM may prompt the user to close running applications while trying to install this version. Simply click &amp;quot;Ok&amp;quot; with the default highlighted option.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Mon, 29 Jun 2026 20:05:45 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for macOS (version 2026.6.822.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-29-warp-macos-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-29-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces multiple features from our previous beta release into stable release, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The client now applies DNS search suffixes configured in your &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/device-profiles&quot;&gt;device profile&lt;/a&gt; / &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/network-policies&quot;&gt;network policy&lt;/a&gt;. Administrators can push a list of DNS search domains that the client appends to single-label queries, alongside any system-configured suffixes. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#dns-search-suffixes&quot;&gt;DNS search suffixes&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Upgraded security of device registration to be hardware-backed. Registration tokens can now be generated in the Secure Enclave whenever available to provide stronger protection against device impersonation. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/hardware-backed-registration/&quot;&gt;Hardware-backed registration&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Added a local-file signal source for Emergency Disconnect. In addition to the existing HTTPS polling mechanism, administrators can now configure WARP to monitor for a file on disk; the presence of the file triggers an emergency disconnect even if both Cloudflare and your own infrastructure are unreachable. Either signal being asserted triggers disconnect; both must be cleared for normal operation to resume.&lt;/li&gt;
&lt;li&gt;Added new warp-cli debug commands for interactive connection diagnosis. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs/#extra-debug-logging&quot;&gt;Extra debug logging&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;The local DNS proxy now supports DNSSEC passthrough. DNSSEC-signed responses are forwarded to the application intact (including DO/AD bits and RRSIG records), so applications that validate DNSSEC locally — including resolvers and the dig/drill tooling — work correctly through the client.&lt;/li&gt;
&lt;li&gt;Added a new MDM format for organization-wide settings, including a cleaner way to configure the compliance environment (e.g. FedRAMP). The previous per-configuration approach still works, but the new format is now recommended. See the updated &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#organization_configs&quot;&gt;Cloudflare One MDM documentation&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Added support for dashboard-managed client version deployments. Administrators can now upgrade or downgrade the client version on enrolled devices directly from the Zero Trust dashboard. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/client-version-assignments/&quot;&gt;Client version assignments&lt;/a&gt; for details.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Additional Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Starting with 2026.6.822.0, the client unifies all API requests under the &lt;code&gt;api.devices.cloudflare.com&lt;/code&gt; SNI, where previously both &lt;code&gt;zero-trust-client.cloudflareclient.com&lt;/code&gt; and &lt;code&gt;notifications.cloudflareclient.com&lt;/code&gt; were used. Review &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/&quot;&gt;Cloudflare One Client with firewall&lt;/a&gt; to ensure systems that rely on SNI inspection do not block the API traffic. The behavior of previous client versions is unaffected.&lt;/li&gt;
&lt;li&gt;Client Certificate device-posture checks now support template variables (e.g. &lt;code&gt;${serial_number}&lt;/code&gt;, &lt;code&gt;${device_uuid}&lt;/code&gt;) in the Subject Alternative Name field. Previously only the Common Name field accepted variables, which broke posture rules that pinned identity to a SAN entry.&lt;/li&gt;
&lt;li&gt;Improved accessibility by using high contrast colors and more defined color boundaries when high contrast is enabled in the macOS Display settings.&lt;/li&gt;
&lt;li&gt;Path MTU Discovery (PMTUD) is now enabled by default.&lt;/li&gt;
&lt;li&gt;Fixed the in-client captive-portal browser rendering a blank &amp;quot;Success&amp;quot; page on some airline Wi-Fi networks. The browser now more consistently loads the airline&amp;#39;s real portal page so users can complete sign-in from inside the client instead of having to open a separate browser.&lt;/li&gt;
&lt;li&gt;Fixed an issue in proxy mode where hostnames containing underscores (e.g. ai_app.com) were rejected, breaking apps that depend on such hostnames (notably ChatGPT sandbox apps). The local proxy now accepts underscore-containing hostnames in CONNECT requests.&lt;/li&gt;
&lt;li&gt;Fixed an issue where DNS queries would fail after the connection was idle, requiring users to retry.&lt;/li&gt;
&lt;li&gt;Users can now register with team names in any case format without errors.&lt;/li&gt;
&lt;li&gt;New UI fixes&lt;ul&gt;
&lt;li&gt;Fixed an issue where users with invalid MDM configurations were returned to the onboarding screen after successful authentication.&lt;/li&gt;
&lt;li&gt;Added a re-auth button and banner to the home screen so users don&amp;#39;t miss it when their session expires.&lt;/li&gt;
&lt;li&gt;Added clear error messaging when the Cloudflare certificate needs to be installed.&lt;/li&gt;
&lt;li&gt;Brought back support for pausing the tunnel when connected to user-specified Wi-Fi networks for consumer users.&lt;/li&gt;
&lt;li&gt;New client UI now surfaces Split tunnel configuration and Local Domain Fallback configuration.&lt;/li&gt;
&lt;li&gt;Added ability to configure proxy mode for consumer users.&lt;/li&gt;
&lt;li&gt;Added back the option to quit for consumer users.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;When deploying with Microsoft Intune, the client may be repeatedly reinstalled because Intune adds the client&amp;#39;s embedded framework bundles to its install-detection list, and those frameworks cannot be detected as installed on their own. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/known-limitations/#repeated-reinstalls-on-macos-with-microsoft-intune&quot;&gt;Repeated reinstalls on macOS with Microsoft Intune&lt;/a&gt; for the workaround.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Mon, 29 Jun 2026 20:05:45 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Linux (version 2026.6.822.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-29-warp-linux-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-29-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces multiple features from our previous beta release into stable release, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The client now applies DNS search suffixes configured in your &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/device-profiles&quot;&gt;device profile&lt;/a&gt; / &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/network-policies&quot;&gt;network policy&lt;/a&gt;. Administrators can push a list of DNS search domains that the client appends to single-label queries, alongside any system-configured suffixes. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#dns-search-suffixes&quot;&gt;DNS search suffixes&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Upgraded security of device registration to be hardware-backed. Registration tokens can now be generated in the TPM (with TPM 2.0+) whenever it is available to provide stronger protection against device impersonation. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/hardware-backed-registration/&quot;&gt;Hardware-backed registration&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Added a local-file signal source for Emergency Disconnect. In addition to the existing HTTPS polling mechanism, administrators can now configure WARP to monitor for a file on disk; the presence of the file triggers an emergency disconnect even if both Cloudflare and your own infrastructure are unreachable. Either signal being asserted triggers disconnect; both must be cleared for normal operation to resume.&lt;/li&gt;
&lt;li&gt;Added new warp-cli debug commands for interactive connection diagnosis. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs/#extra-debug-logging&quot;&gt;Extra debug logging&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;The local DNS proxy now supports DNSSEC passthrough. DNSSEC-signed responses are forwarded to the application intact (including DO/AD bits and RRSIG records), so applications that validate DNSSEC locally — including resolvers and the dig/drill tooling — work correctly through the client.&lt;/li&gt;
&lt;li&gt;Added a new MDM format for organization-wide settings, including a cleaner way to configure the compliance environment (e.g. FedRAMP). The previous per-configuration approach still works, but the new format is now recommended. See the updated &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#organization_configs&quot;&gt;Cloudflare One MDM documentation&lt;/a&gt; for details.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Additional changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Starting with 2026.6.822.0, the client unifies all API requests under the &lt;code&gt;api.devices.cloudflare.com&lt;/code&gt; SNI, where previously both &lt;code&gt;zero-trust-client.cloudflareclient.com&lt;/code&gt; and &lt;code&gt;notifications.cloudflareclient.com&lt;/code&gt; were used. Review &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/&quot;&gt;Cloudflare One Client with firewall&lt;/a&gt; to ensure systems that rely on SNI inspection do not block the API traffic. The behavior of previous client versions is unaffected.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot;&gt;Cloudflare Mesh&lt;/a&gt; functionality using the Cloudflare One Client is now supported on RHEL 9 and 10.&lt;/li&gt;
&lt;li&gt;Cloudflare Mesh now supports &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/routes/#hostname-routes&quot;&gt;hostname-based routing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Client Certificate device-posture checks now support template variables (e.g. &lt;code&gt;${serial_number}&lt;/code&gt;, &lt;code&gt;${device_uuid}&lt;/code&gt;) in the Subject Alternative Name field. Previously only the Common Name field accepted variables, which broke posture rules that pinned identity to a SAN entry.&lt;/li&gt;
&lt;li&gt;Improved accessibility by using high contrast colors and more defined color boundaries when high contrast is enabled in the system display settings.&lt;/li&gt;
&lt;li&gt;Path MTU Discovery (PMTUD) is now enabled by default.&lt;/li&gt;
&lt;li&gt;Fixed the in-client captive-portal browser rendering a blank &amp;quot;Success&amp;quot; page on some airline Wi-Fi networks. The browser now more consistently loads the airline&amp;#39;s real portal page so users can complete sign-in from inside the client instead of having to open a separate browser.&lt;/li&gt;
&lt;li&gt;Fixed an issue in proxy mode where hostnames containing underscores (e.g. ai_app.com) were rejected, breaking apps that depend on such hostnames (notably ChatGPT sandbox apps). The local proxy now accepts underscore-containing hostnames in CONNECT requests.&lt;/li&gt;
&lt;li&gt;Fixed an issue where DNS queries would fail after the connection was idle, requiring users to retry.&lt;/li&gt;
&lt;li&gt;Fixed an issue where some Debian releases experienced inaccurate version reporting for posture checks.&lt;/li&gt;
&lt;li&gt;Users can now register with team names in any case format without errors.&lt;/li&gt;
&lt;li&gt;New UI fixes&lt;ul&gt;
&lt;li&gt;Fixed an issue where users with invalid MDM configurations were returned to the onboarding screen after successful authentication.&lt;/li&gt;
&lt;li&gt;Added a re-auth button and banner to the home screen so users don&amp;#39;t miss it when their session expires.&lt;/li&gt;
&lt;li&gt;Added clear error messaging when the Cloudflare certificate needs to be installed.&lt;/li&gt;
&lt;li&gt;Brought back support for pausing the tunnel when connected to user-specified Wi-Fi networks for consumer users.&lt;/li&gt;
&lt;li&gt;New client UI now surfaces Split tunnel configuration and Local Domain Fallback configuration.&lt;/li&gt;
&lt;li&gt;Added ability to configure proxy mode for consumer users.&lt;/li&gt;
&lt;li&gt;Added back the option to quit for consumer users.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For RHEL deployments, this release introduces a dependency on the &lt;a href=&quot;https://docs.fedoraproject.org/en-US/epel/&quot;&gt;Extra Packages for Enterprise Linux&lt;/a&gt; repository (EPEL). The EPEL repository provides packages that support the captive portal detection’s in-app browser authentication and system tray icon. See &lt;a href=&quot;https://docs.fedoraproject.org/en-US/epel/getting-started/&quot;&gt;Getting started with EPEL&lt;/a&gt; for instructions on enabling EPEL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Mon, 29 Jun 2026 19:21:09 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Workers - Workers fetch 请求现在支持 cf.vary</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-28-cf-vary-request-option/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-28-cf-vary-request-option/</guid><description>
&lt;p&gt;Workers &lt;code&gt;fetch()&lt;/code&gt; 请求现在支持 &lt;code&gt;cf.vary&lt;/code&gt; 请求选项。使用 &lt;code&gt;cf.vary&lt;/code&gt; 可以控制 Cloudflare 如何为单个子请求缓存具有 &lt;code&gt;Vary&lt;/code&gt; 标头的源服务器响应。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;js&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.js&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(request, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			cf: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				vary: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;					default: { action: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;bypass&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;					headers: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;						accept: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;							action: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;normalize&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;							media_types: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;text/html&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;						},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;						&quot;accept-language&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;							action: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;normalize&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;							languages: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;fr&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;de&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;						},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;					},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.ts&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Promise&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(request, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			cf: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				vary: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;					default: { action: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;bypass&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;					headers: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;						accept: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;							action: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;normalize&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;							media_types: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;text/html&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;						},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;						&quot;accept-language&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;							action: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;normalize&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;							languages: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;fr&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;de&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;						},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;					},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;satisfies&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ExportedHandler&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/runtime-apis/request/#the-cfvary-property&quot;&gt;&lt;code&gt;cf.vary&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Agents, Workers - Agents SDK 添加了后台子 agent 和统一的轮次入口点</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-26-agents-sdk-v0.17.0/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-26-agents-sdk-v0.17.0/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Agents SDK&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 的最新版本使得在后台运行长时间工作、通过一个入口点驱动轮次以及让聊天 agent 在部署、驱逐和重新连接期间保持正常工作变得更加容易。&lt;/p&gt;
&lt;p&gt;此版本添加了一等的独立（后台）子 agent 运行（具有实时进度和持久里程碑）、单个 &lt;code&gt;runTurn&lt;/code&gt; 轮次准入入口点，以及大量的恢复和可靠性修复，这些修复继续将 &lt;code&gt;@cloudflare/think&lt;/code&gt; 和 &lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; 收敛到同一个模型上。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;具有进度和里程碑的后台子-agent&quot;&gt;具有进度和里程碑的后台子 agent&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#具有进度和里程碑的后台子-agent&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;runAgentTool&lt;/code&gt; 现在可以派发一个子 agent，而不会阻塞调用轮次。独立的运行会立即返回一个句柄，并由一个持久的、在驱逐中存活的骨干（backbone）所拥有，而不是在派发轮次结束时被放弃。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; OrdersAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; startImport&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// Fire-and-forget, or wire a durable completion callback&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// (by method name, like schedule()):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;runAgentTool&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(ImportAgent, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			input,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			detached: { onFinish: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;onImportDone&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, maxBudgetMs: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; *&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 60&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; *&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 1000&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;	// result.status: &quot;completed&quot; | &quot;error&quot; | &quot;aborted&quot; | &quot;interrupted&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; onImportDone&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; OrdersAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; startImport&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// Fire-and-forget, or wire a durable completion callback&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// (by method name, like schedule()):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;runAgentTool&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(ImportAgent, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			input,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			detached: { onFinish: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;onImportDone&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, maxBudgetMs: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; *&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 60&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; *&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 1000&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;	// result.status: &quot;completed&quot; | &quot;error&quot; | &quot;aborted&quot; | &quot;interrupted&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; onImportDone&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;亮点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;持久的、在正常路径上仅执行一次的完成&lt;/strong&gt;：通过热快速路径以及一个在驱逐和部署中存活的自调度对齐骨干。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;有边界。&lt;/strong&gt; 绝对的 &lt;code&gt;maxBudgetMs&lt;/code&gt; 上限（默认 24 小时）和 &lt;code&gt;cancelAgentTool(runId)&lt;/code&gt; 可以防止被放弃的运行永远占用并发槽位。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;detached: { notify: true }&lt;/code&gt;&lt;/strong&gt; 允许已完成的后台运行将消息注入回聊天中，以便模型对结果做出反应 —— 无需手动连接 &lt;code&gt;onFinish&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;子 agent 还可以报告运行中进度，这些进度会通过它们自己的轮次流返回到父级连接的客户端：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Inside the child sub-agent:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;reportProgress&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	fraction: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;0.6&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	phase: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;deploying&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	message: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Generating menu page…&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Inside the child sub-agent:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;reportProgress&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	fraction: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;0.6&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	phase: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;deploying&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	message: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Generating menu page…&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;进度通过 &lt;code&gt;useAgentToolEvents&lt;/code&gt; 呈现在 &lt;code&gt;AgentToolRunState.progress&lt;/code&gt; 上，因此后台运行托盘（tray）可以渲染实时进度条而无需深入查看，并且最新快照会被持久化以便在驱逐后进行检查。命名一个 &lt;code&gt;milestone&lt;/code&gt;（里程碑）会将一个信号提升为持久的、可重放的行，并且 &lt;code&gt;detached: { onMilestones }&lt;/code&gt; 可以将里程碑呈现为合成聊天消息（对于简单的状态行使用 &lt;code&gt;&quot;narrate&quot;&lt;/code&gt;，或者使用 &lt;code&gt;&quot;react&quot;&lt;/code&gt; 来驱动模型轮次）。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;轮次的单一入口点runturn&quot;&gt;轮次的单一入口点：&lt;code&gt;runTurn&lt;/code&gt;&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#轮次的单一入口点runturn&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;@cloudflare/think&lt;/code&gt; 添加了一个公共 &lt;code&gt;runTurn(options)&lt;/code&gt; 外观（facade），将轮次准入统一在单个 &lt;code&gt;mode&lt;/code&gt; 后面：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;runTurn&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ mode: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;wait&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, messages }); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// saveMessages / continueLastTurn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;runTurn&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ mode: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;submit&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, messages }); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// durable submitMessages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;runTurn&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ mode: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;stream&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, messages }); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// chat()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;runTurn&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ mode: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;wait&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, messages }); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// saveMessages / continueLastTurn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;runTurn&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ mode: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;submit&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, messages }); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// durable submitMessages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;runTurn&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ mode: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;stream&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, messages }); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// chat()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;stream&lt;/code&gt; 模式接受数组和函数输入以匹配 &lt;code&gt;wait&lt;/code&gt; 模式，所有入口点现在都通过共享的内部准入路径进行路由，该路径在之前可能导致死锁的嵌套阻塞准入上会抛出清晰的错误。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;恢复和可靠性&quot;&gt;恢复和可靠性&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#恢复和可靠性&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;此版本的很大一部分继续强化恢复，并将 &lt;code&gt;@cloudflare/think&lt;/code&gt; 和 &lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; 收敛到同一个模型上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;流停滞看门狗。&lt;/strong&gt; &lt;code&gt;AIChatAgent&lt;/code&gt; 可以通过选择启用的 &lt;code&gt;chatStreamStallTimeoutMs&lt;/code&gt; 看门狗检测并从挂起的模型/传输流中恢复。启用 &lt;code&gt;chatRecovery&lt;/code&gt; 后，停滞将路由到部署或驱逐使用的相同有界恢复机制中；否则，它会作为终端流错误显现，以便清除加载指示器。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中断的工具调用修复。&lt;/strong&gt; &lt;code&gt;AIChatAgent&lt;/code&gt; 现在在重新进入推理之前会修复带有已死服务器工具调用的脚本（与 &lt;code&gt;@cloudflare/think&lt;/code&gt; 保持一致），因此恢复的轮次不再因 &lt;code&gt;AI_MissingToolResultsError&lt;/code&gt; 而失败。可重写的 &lt;code&gt;repairInterruptedToolPart(part)&lt;/code&gt; Hook 允许应用程序自定义修复后的形状。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;重连后状态卡住。&lt;/strong&gt; 修复了当重连与已接受但尚未开始流式传输的轮次发生竞态时，AI SDK &lt;code&gt;status&lt;/code&gt; 卡住的问题，因此 UI 现在会渲染进行中的轮次，而不是卡在 &lt;code&gt;ready&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;连接时的实时 “recovering…”。&lt;/strong&gt; &lt;code&gt;AIChatAgent&lt;/code&gt; 现在会将恢复状态回放到在恢复途中连接的客户端，因此 &lt;code&gt;useAgentChat&lt;/code&gt; 的 &lt;code&gt;isRecovering&lt;/code&gt; 会立即反映进行中的恢复，而不是显得冻结。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;终端连接失败。&lt;/strong&gt; 客户端在终端 WebSocket 关闭事件上停止重新连接，并通过 &lt;code&gt;AgentClient&lt;/code&gt;、&lt;code&gt;useAgent&lt;/code&gt; 和 &lt;code&gt;useAgentChat&lt;/code&gt; 上的 &lt;code&gt;connectionError&lt;/code&gt; / &lt;code&gt;onConnectionError&lt;/code&gt; 暴露它们。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent-tool 子节点恢复。&lt;/strong&gt; 在部署后，健康的长期运行子 agent 运行不再被作为 &lt;code&gt;interrupted&lt;/code&gt;（中断）放弃（对于 &lt;code&gt;@cloudflare/think&lt;/code&gt; 和 &lt;code&gt;AIChatAgent&lt;/code&gt; 皆是如此）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;来自子 agent 侧面（facets）的 Workflow。&lt;/strong&gt; Agent Workflows 现在可以从子 agent 侧面（facets）开始，回调和 Workflow RPC 会被路由回源侧面。&lt;/li&gt;
&lt;li&gt;此外还有前向进度信用收敛、广播优先放弃顺序、事件驱动的自动继续屏障，以及 &lt;code&gt;AIChatAgent&lt;/code&gt; 中的结构化行大小压缩。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;其他改进&quot;&gt;其他改进&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#其他改进&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;共享聊天 React 核心。&lt;/strong&gt; 新的 &lt;code&gt;agents/chat/react&lt;/code&gt; 入口暴露了 &lt;code&gt;useAgentChat&lt;/code&gt;、传输辅助函数和共享线缆（wire）类型，具有用于服务器权威脚本存储的 &lt;code&gt;syncMessagesToServer&lt;/code&gt;。&lt;code&gt;@cloudflare/think/react&lt;/code&gt; and &lt;code&gt;@cloudflare/ai-chat/react&lt;/code&gt; 现在只是它的薄包装器。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可选的 &lt;code&gt;ai&lt;/code&gt; 同级依赖。&lt;/strong&gt; 根 &lt;code&gt;agents&lt;/code&gt; and &lt;code&gt;@cloudflare/codemode&lt;/code&gt; 运行时不再引用 AI SDK 类型，因此它们可以在不安装 &lt;code&gt;ai&lt;/code&gt; / &lt;code&gt;zod&lt;/code&gt; 的情况下打包；特定于 AI 的入口点在导入时仍然需要同级依赖。&lt;code&gt;just-bash&lt;/code&gt; 同样移动到了仅由 skills bash 运行器使用的可选同级依赖中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Mode。&lt;/strong&gt; 默认的 &lt;code&gt;DynamicWorkerExecutor&lt;/code&gt; 超时时间从 30 秒增加到 60 秒，每次运行后现在会销毁动态加载的 Worker 及其 RPC 存根（stub）（修复了不稳定的隔离区关闭断言），连接器导入已被清理，并且外部 MCP 工具调用上下文会被传递给 &lt;code&gt;openApiMcpServer&lt;/code&gt; 请求回调。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voice。&lt;/strong&gt; Voice 轮次现在支持 AI SDK &lt;code&gt;fullStream&lt;/code&gt; 响应（并在使用 &lt;code&gt;textStream&lt;/code&gt; 时发出警告）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP。&lt;/strong&gt; &lt;code&gt;McpAgent&lt;/code&gt; 服务器到客户端的请求现在可以从不继承 agent 异步上下文的回调中发送，包括通过 Worker Loader RPC 到达的回调。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实验性：服务器操作和通道。&lt;/strong&gt; 此版本为受保护的服务器操作（带有持久重放账本和批准的 &lt;code&gt;action()&lt;/code&gt; / &lt;code&gt;getActions()&lt;/code&gt;）和统一的通道表面（&lt;code&gt;configureChannels()&lt;/code&gt;、&lt;code&gt;deliverNotice()&lt;/code&gt;）奠定了基础。两者都是实验性的，它们的 API 可能会发生变化，因此我们目前不建议依赖它们。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;升级&quot;&gt;升级&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#升级&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;要更新到最新版本：&lt;/p&gt;
&lt;script&gt;
	if (!customElements.get(&quot;nb-pm-restore&quot;)) {
		customElements.define(
			&quot;nb-pm-restore&quot;,
			class extends HTMLElement {
				connectedCallback() {
					const card = this.closest(&quot;[data-nb-pm]&quot;);
					if (!card) return;
					let saved;
					try {
						saved = sessionStorage.getItem(&quot;ui-pm-tab&quot;);
					} catch {
						return;
					}
					if (!saved) return;
					const tabs = card.querySelectorAll(&quot;[data-nb-pm-tab]&quot;);
					let idx = -1;
					tabs.forEach(function (t, i) {
						if (t.textContent.trim() === saved) idx = i;
					});
					if (idx &lt; 1) return;
					tabs.forEach(function (t, i) {
						t.setAttribute(&quot;aria-selected&quot;, String(i === idx));
					});
					card.querySelectorAll(&quot;[data-nb-pm-panel]&quot;).forEach(function (p, i) {
						p.hidden = i !== idx;
					});
				}
			},
		);
	}
&lt;/script&gt;&lt;div data-nb-pm class=&quot;w-full&quot;&gt;&lt;div class=&quot;flex w-full flex-col overflow-hidden rounded-lg text-sm ring ring-border bg-card&quot;&gt;&lt;div class=&quot;flex items-center gap-2 px-3 py-2 text-[0.8125rem] font-medium leading-5 text-muted-foreground bg-[var(--nb-surface-sunken)]&quot; role=&quot;tablist&quot; aria-label=&quot;Package manager&quot;&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;true&quot; aria-controls=&quot;pm-panel-pm-b233903d-aa5a-47b1-a52e-849e646c3677-npm&quot; id=&quot;pm-tab-pm-b233903d-aa5a-47b1-a52e-849e646c3677-npm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;npm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-b233903d-aa5a-47b1-a52e-849e646c3677-yarn&quot; id=&quot;pm-tab-pm-b233903d-aa5a-47b1-a52e-849e646c3677-yarn&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;yarn&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-b233903d-aa5a-47b1-a52e-849e646c3677-pnpm&quot; id=&quot;pm-tab-pm-b233903d-aa5a-47b1-a52e-849e646c3677-pnpm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;pnpm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-b233903d-aa5a-47b1-a52e-849e646c3677-bun&quot; id=&quot;pm-tab-pm-b233903d-aa5a-47b1-a52e-849e646c3677-bun&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;bun&lt;/button&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-b233903d-aa5a-47b1-a52e-849e646c3677-npm&quot; aria-labelledby=&quot;pm-tab-pm-b233903d-aa5a-47b1-a52e-849e646c3677-npm&quot; data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; i agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/voice@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;npm i agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/voice@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;symbol id=&quot;ai:ph:copy&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;symbol id=&quot;ai:ph:check&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-b233903d-aa5a-47b1-a52e-849e646c3677-yarn&quot; aria-labelledby=&quot;pm-tab-pm-b233903d-aa5a-47b1-a52e-849e646c3677-yarn&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/voice@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;yarn add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/voice@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-b233903d-aa5a-47b1-a52e-849e646c3677-pnpm&quot; aria-labelledby=&quot;pm-tab-pm-b233903d-aa5a-47b1-a52e-849e646c3677-pnpm&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;pnpm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/voice@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;pnpm add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/voice@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-b233903d-aa5a-47b1-a52e-849e646c3677-bun&quot; aria-labelledby=&quot;pm-tab-pm-b233903d-aa5a-47b1-a52e-849e646c3677-bun&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;bun&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/voice@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;bun add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/voice@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;nb-pm-restore style=&quot;display:contents&quot;&gt;&lt;/nb-pm-restore&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/package-managers/PackageManagers.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/harnesses/think/&quot;&gt;Think 文档&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/tools/codemode/&quot;&gt;Code Mode 文档&lt;/a&gt;和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/&quot;&gt;Agents 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Cloudflare One, Access - MCP 服务端门户支持 Service token</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-26-mcp-portal-service-tokens/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-26-mcp-portal-service-tokens/</guid><description>&lt;p&gt;您现在可以使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/service-credentials/service-tokens/&quot;&gt;Access service token&lt;/a&gt; 将自主 Agent 和机器人连接到 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot;&gt;MCP 服务端门户&lt;/a&gt;。Service token 会话可以通过门户访问上游 MCP 服务端，而无需基于浏览器的 OAuth 流程。&lt;/p&gt;
&lt;p&gt;要进行此设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将与您的 service token 匹配的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/policies/#service-auth&quot;&gt;Service Auth 策略&lt;/a&gt;添加到门户的 Access 应用程序。&lt;/li&gt;
&lt;li&gt;将与相同 token 匹配的 Service Auth 策略添加到每个关联的 MCP 服务端的 Access 应用程序。&lt;/li&gt;
&lt;li&gt;将每个关联服务端的 **Require user auth（需要用户身份验证）**关闭（&lt;code&gt;on_behalf: false&lt;/code&gt;），以便门户使用管理员凭证，而不是每个用户的 OAuth 授权。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;机器人使用 &lt;code&gt;CF-Access-Client-Id&lt;/code&gt; 和 &lt;code&gt;CF-Access-Client-Secret&lt;/code&gt; 请求头进行连接，并可以看到其获得授权的每个关联服务端中的工具。仍然需要每个用户 OAuth 的服务端将被排除在 service token 会话之外，因为 service token 无法完成每个用户的 OAuth 授权。&lt;/p&gt;
&lt;p&gt;有关逐步设置，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/ai-controls/mcp-portals/#connect-with-a-service-token&quot;&gt;使用 service token 进行连接&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Access</category></item><item><title>Durable Objects, Workers - Durable Objects 新增 `us` 管辖区（Jurisdiction）</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-26-durable-objects-us-jurisdiction/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-26-durable-objects-us-jurisdiction/</guid><description>&lt;p&gt;Durable Objects 现在支持 &lt;code&gt;us&lt;/code&gt; &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/data-location/#restrict-durable-objects-to-a-jurisdiction&quot;&gt;管辖区（jurisdiction）&lt;/a&gt;，允许您创建仅在美国境内运行并存储数据的 Durable Objects。当您需要将 Durable Object 的计算和存储保留在美国境内以满足数据驻留要求时，请使用 &lt;code&gt;us&lt;/code&gt; 管辖区。&lt;/p&gt;
&lt;p&gt;像使用任何其他管辖区一样，创建一个受限于 &lt;code&gt;us&lt;/code&gt; 管辖区的命名空间：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Worker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; usSubnamespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;jurisdiction&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;us&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; stub&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; usSubnamespace.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;getByName&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;general&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; stub.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(request);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Workers 仍可从世界任何地方访问受限于 &lt;code&gt;us&lt;/code&gt; 管辖区的 Durable Objects。管辖区限制仅控制 Durable Object 本身在何处运行和持久化数据。&lt;/p&gt;
&lt;p&gt;如需查看支持的管辖区的完整列表，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/data-location/#restrict-durable-objects-to-a-jurisdiction&quot;&gt;数据位置 — 限制 Durable Objects 至特定管辖区&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Cloudflare Fundamentals - 按名称搜索 API 令牌</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-25-api-token-search/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-25-api-token-search/</guid><description>&lt;p&gt;您现在可以按名称搜索 API 令牌，从而更容易在庞大的令牌列表中查找特定令牌，而无需手动分页。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新增功能&quot;&gt;新增功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新增功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;仪表板搜索&lt;/strong&gt;：&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/account-api-tokens&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;账户 API 令牌&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;和&lt;a href=&quot;https://dash.cloudflare.com/profile/api-tokens&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;用户 API 令牌&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;页面现在都包含一个搜索栏。输入名称即可过滤结果。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API 搜索支持&lt;/strong&gt;：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/user/subresources/tokens/methods/list/&quot;&gt;&lt;code&gt;/user/tokens&lt;/code&gt;&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/accounts/subresources/tokens/methods/list/&quot;&gt;&lt;code&gt;/accounts/{account_id}/tokens&lt;/code&gt;&lt;/a&gt; 端点现在接受 &lt;code&gt;name&lt;/code&gt; 查询参数，以按名称过滤令牌。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/api/get-started/create-token/&quot;&gt;创建 API 令牌&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/api/get-started/account-owned-tokens/&quot;&gt;账户拥有的 API 令牌&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Durable Objects, Workers - 使用新的 cloudflare:test 辅助函数测试 Durable Object 逐出（eviction）</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-25-durable-object-eviction-test-helpers/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-25-durable-object-eviction-test-helpers/</guid><description>&lt;p&gt;&lt;code&gt;@cloudflare/vitest-pool-workers&lt;/code&gt; 包现在包含了从 &lt;code&gt;cloudflare:test&lt;/code&gt; 导出的 &lt;code&gt;evictDurableObject&lt;/code&gt; 和 &lt;code&gt;evictAllDurableObjects&lt;/code&gt; 测试辅助函数。&lt;/p&gt;
&lt;p&gt;这些辅助函数允许您测试 Durable Object 在逐出发生时的行为，模拟闲置 Durable Object 从内存中逐出的实际生产生命周期。&lt;/p&gt;
&lt;p&gt;有关更多背景信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/concepts/durable-object-lifecycle/&quot;&gt;Durable Object 的生命周期&lt;/a&gt;。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { evictDurableObject, evictAllDurableObjects } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;cloudflare:test&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { env } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COUNTER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;idFromName&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-counter&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; stub&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COUNTER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(id);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// 逐出特定 stub 所指向的 Durable Object 实例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; evictDurableObject&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(stub);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// 关闭 WebSockets 而不是将它们休眠&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; evictDurableObject&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(stub, { webSockets: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;close&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// 逐出当前在可逐出命名空间中运行的所有 Durable Objects&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; evictAllDurableObjects&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这些辅助函数在 &lt;code&gt;@cloudflare/vitest-pool-workers@0.16.20&lt;/code&gt; 及更高版本中可用。&lt;/p&gt;
&lt;p&gt;请在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/testing/vitest-integration/test-apis/#durable-objects&quot;&gt;测试 API 参考&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/examples/testing-with-durable-objects/#testing-eviction&quot;&gt;测试 Durable Objects 指南&lt;/a&gt;中了解更多信息。&lt;/p&gt;</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Cloudflare One Client - Cloudflare One Client for macOS (version 2026.6.782.1)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-warp-macos-beta/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This beta release introduces upgraded security of device registration to be hardware-backed. Registration tokens can now be generated in the Secure Enclave whenever available to provide stronger protection against device impersonation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Additional changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This release also introduces multiple fixes and improvements including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved accessibility by using high contrast colors and more defined color boundaries when high contrast is enabled in the macOS Display settings.&lt;/li&gt;
&lt;li&gt;Path MTU Discovery (PMTUD) is now enabled by default.&lt;/li&gt;
&lt;li&gt;Fixed an issue where DNS queries would fail after the connection was idle, requiring users to retry.&lt;/li&gt;
&lt;li&gt;Users can now register with team names in any case format without errors.&lt;/li&gt;
&lt;li&gt;New UI fixes&lt;ul&gt;
&lt;li&gt;Fixed an issue where users with invalid MDM configurations were returned to the onboarding screen after successful authentication.&lt;/li&gt;
&lt;li&gt;Added a re-auth button and banner to the home screen so users don&amp;#39;t miss it when their session expires.&lt;/li&gt;
&lt;li&gt;Added clear error messaging when the Cloudflare certificate needs to be installed.&lt;/li&gt;
&lt;li&gt;Brought back support for pausing the tunnel when connected to user-specified Wi-Fi networks for consumer users.&lt;/li&gt;
&lt;li&gt;New client UI now surfaces Split tunnel configuration and Local Domain Fallback configuration.&lt;/li&gt;
&lt;li&gt;Added ability to configure proxy mode for consumer users.&lt;/li&gt;
&lt;li&gt;Added back the option to quit for consumer users.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Wed, 24 Jun 2026 18:35:32 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>AI Search - 控制 AI Search 相似性缓存新鲜度</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-ai-search-similarity-cache-controls/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-ai-search-similarity-cache-controls/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; 现在让您能够更好地控制&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/configuration/retrieval/cache/&quot;&gt;相似性缓存&lt;/a&gt;新鲜度。相似性缓存通过重用语义相似查询的响应，有助于降低延迟和推理成本。&lt;/p&gt;
&lt;p&gt;通过这些更新，您可以选择允许重用响应的时间长度，并在缓存的响应可能过时时将其清除。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;缓存持续时间现在默认为-48-小时&quot;&gt;缓存持续时间现在默认为 48 小时&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#缓存持续时间现在默认为-48-小时&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;以前，AI Search 缓存响应的固定时间为 30 天。缓存的响应现在使用实例的 &lt;code&gt;cache_ttl&lt;/code&gt; 设置，默认值为 &lt;strong&gt;48 小时&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;您可以在创建或更新实例时设置 &lt;code&gt;cache_ttl&lt;/code&gt;，以选择从 10 分钟到 6 天不等的缓存持续时间。&lt;/p&gt;
&lt;p&gt;当您的源内容变化频繁且新鲜度更重要时，请使用较短的 TTL。当您的内容稳定且您希望更多地重用缓存时，请使用较长的 TTL。&lt;/p&gt;
&lt;p&gt;例如，将 &lt;code&gt;cache_ttl&lt;/code&gt; 设置为 &lt;code&gt;518400&lt;/code&gt; 以将缓存的响应保留 6 天：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;json&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot; data-nb-lang=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;cache_ttl&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;518400&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;清除缓存响应&quot;&gt;清除缓存响应&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#清除缓存响应&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;您还可以按需清除实例的所有缓存响应。清除缓存响应不会删除已索引的内容或源文件。&lt;/p&gt;
&lt;p&gt;这会阻止 AI Search 重用以前缓存的响应，因此后续的相似查询会生成新鲜的答案并重新填充缓存。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/ai-search/instances/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$INSTANCE_NAME&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/purge_cache&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;您还可以从 Cloudflare 仪表板中的实例设置页面清除缓存响应。&lt;/p&gt;
&lt;p&gt;请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/configuration/retrieval/cache/&quot;&gt;相似性缓存&lt;/a&gt;以获取支持的 &lt;code&gt;cache_ttl&lt;/code&gt; 值的完整列表以及有关缓存行为的更多详细信息。&lt;/p&gt;</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Audit Logs - 审核日志（第 2 版）— Cloudflare 仪表板中的组织级审核日志</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-audit-logs-v2-organization-dashboard-ui/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-audit-logs-v2-organization-dashboard-ui/</guid><description>&lt;p&gt;作为&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/organizations/&quot;&gt;组织&lt;/a&gt;超级管理员，除现有的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/account/account-security/audit-logs/#organization-activity-logs&quot;&gt;API 访问&lt;/a&gt;外，您现在还可以在 Cloudflare 仪表板中查看组织级&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/account/account-security/audit-logs/&quot;&gt;审核日志&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;组织审核日志可帮助您监控整个组织内的活动。您可以查看谁执行了操作、更改了什么、发生的时间、操作方式以及操作是成功还是失败。&lt;/p&gt;
&lt;p&gt;您可以按操作者 (actor)、操作、结果、资源、请求详细信息和时间戳对日志进行过滤和搜索。使用这些日志来排查变更、调查异常访问并支持安全或合规工作流。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/Audit_logs_v2_organization_dashboard.De-uwPva_Z1QU6mw.webp&quot; alt=&quot;Cloudflare 仪表板中的组织审核日志&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3450&quot; height=&quot;1738&quot;&gt;
&lt;p&gt;如果您正在查看账户级审核日志，且该账户属于您作为组织超级管理员的组织，请选择 &lt;strong&gt;View Organization Audit Logs（查看组织审核日志）&lt;/strong&gt; 以打开父组织的审核日志。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/Audit_logs_v2_view_organization_button.Ch7CaBB-_Z10mKrb.webp&quot; alt=&quot;查看组织审核日志 (View Organization Audit Logs) 按钮&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3456&quot; height=&quot;510&quot;&gt;
&lt;p&gt;要开始使用，请前往 &lt;strong&gt;Organizations（组织）&lt;/strong&gt;，选择您的组织，然后前往 &lt;strong&gt;Manage Organization（管理组织）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Audit Logs（审核日志）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/account/account-security/audit-logs/&quot;&gt;审核日志文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><product>Audit Logs</product><category>Audit Logs</category></item><item><title>Logs - 新的 WebSocket Analytics Logpush 数据集及字段更新</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-log-fields-updated/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-log-fields-updated/</guid><description>&lt;p&gt;Cloudflare 已更新 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;：&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新数据集&quot;&gt;新数据集&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新数据集&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WebSocket Analytics&lt;/strong&gt;：新数据集，字段包括 &lt;code&gt;BytesReceivedClient&lt;/code&gt;、&lt;code&gt;BytesReceivedOrigin&lt;/code&gt;、&lt;code&gt;BytesSentClient&lt;/code&gt;、&lt;code&gt;BytesSentOrigin&lt;/code&gt;、&lt;code&gt;ClientASN&lt;/code&gt;、&lt;code&gt;ClientIP&lt;/code&gt;、&lt;code&gt;ClientRequestHost&lt;/code&gt;、&lt;code&gt;ClientRequestPath&lt;/code&gt;、&lt;code&gt;ClientRequestUserAgent&lt;/code&gt;、&lt;code&gt;ColoCode&lt;/code&gt;、&lt;code&gt;ConnectionCloseReason&lt;/code&gt;、&lt;code&gt;ConnectionCloseSource&lt;/code&gt;、&lt;code&gt;ConnectionID&lt;/code&gt;、&lt;code&gt;ConnectionTransportCloseCode&lt;/code&gt;、&lt;code&gt;EdgeEndTimestamp&lt;/code&gt;、&lt;code&gt;EdgeStartTimestamp&lt;/code&gt; 和 &lt;code&gt;RayID&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;现有数据集的字段更新&quot;&gt;现有数据集的字段更新&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#现有数据集的字段更新&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Firewall events（新增）&lt;/strong&gt;：&lt;code&gt;ZoneName&lt;/code&gt;。Firewall events 数据集现在也支持&lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/account/firewall_events/&quot;&gt;账户范围的 Logpush&lt;/a&gt;，是对现有区域范围的补充。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email Security Alerts（新增）&lt;/strong&gt;：&lt;code&gt;BCC&lt;/code&gt;、&lt;code&gt;DKIMResult&lt;/code&gt;、&lt;code&gt;DMARCPolicy&lt;/code&gt;、&lt;code&gt;DMARCResult&lt;/code&gt; 和 &lt;code&gt;SPFResult&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关每个数据集的完整字段定义，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Radar - Cloudflare Radar IP 页面精确定位及更丰富的 AS 详情</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-radar-ip-page-improvements/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-24-radar-ip-page-improvements/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; 现在可在 &lt;a href=&quot;https://radar.cloudflare.com/ip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;IP 页面&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;上标注您的 IPv4 和 IPv6 位置，显示为您提供服务的 Cloudflare 数据中心，并提供更多关于您主要 IP 所属自治系统（AS）的详情。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;地图上的-ip-位置&quot;&gt;地图上的 IP 位置&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#地图上的-ip-位置&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;连接地图现在显示：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IP 位置标记&lt;/strong&gt; — 主 IP 显示为红色标记。当两个 IP 地址地理定位到不同位置时，会出现蓝色第二标记，并附注说明 IPv4 和 IPv6 可能解析到不同位置的原因。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare 数据中心标记&lt;/strong&gt; — Cloudflare 数据中心现以橙色点显示在地图上，您所连接的数据中心会被高亮显示。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据中心连接线&lt;/strong&gt; — 每条线将您的 IP 标记与其对应的数据中心相连。&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/ip-page-geolocation.BJ53oUtj_ZhL3mu.webp&quot; alt=&quot;地图上显示 Cloudflare 数据中心和 IP 位置标记，并用连线连接数据中心&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3136&quot; height=&quot;1305&quot;&gt;
&lt;p&gt;由于地理位置提供商的数据政策，此详细位置信息仅适用于您自己的 IP。其他 IP 地址仍使用当前的国家级视图。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;扩展的-as-信息&quot;&gt;扩展的 AS 信息&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#扩展的-as-信息&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;IP 页面上的 AS 卡片现在显示 IP 所属网络的更多详情——包括备用名称、运营商网站以及 AS 用户数量估计——以及 AS 编号和国家。&lt;/p&gt;
&lt;p&gt;访问 &lt;a href=&quot;https://radar.cloudflare.com/ip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Radar IP 页面&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;，探索有关您 IP 的更多详情。&lt;/p&gt;</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Workflows - Workflows 回滚处理程序现在包含步骤上下文</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-rollback-options/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-rollback-options/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/&quot;&gt;Workflows&lt;/a&gt; 使构建可靠的多步骤应用程序变得更加容易，这些应用程序能够在下游系统故障时恢复。回滚处理程序现在通过 &lt;code&gt;ctx&lt;/code&gt; 对象接收正在回滚的步骤的原始&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/build/step-context/&quot;&gt;步骤上下文&lt;/a&gt;。这包括 &lt;code&gt;ctx.step.name&lt;/code&gt;、&lt;code&gt;ctx.step.count&lt;/code&gt;、&lt;code&gt;ctx.attempt&lt;/code&gt; 以及应用了默认值的步骤 &lt;code&gt;config&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/build/workers-api/#workflowstepconfig&quot;&gt;步骤配置&lt;/a&gt;包含用于该步骤的重试和超时设置，因此您可以根据这些字段自定义步骤恢复逻辑。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;	&quot;create charge&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; () &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; charge&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; createCharge&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { chargeId: charge.id };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;		rollback&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; ({ &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;			// `output` 是被回滚步骤返回的值。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			const&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;chargeId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; output &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;as&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;chargeId&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; refundCharge&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(chargeId, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;				// `ctx` 是原始步骤上下文，包括步骤名称、计数、尝试次数和配置。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				reason: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;`${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;step&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}: ${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		rollbackConfig: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;			// `rollbackConfig` 控制回滚处理程序的重试和超时。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			retries: { limit: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, delay: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;30 seconds&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, backoff: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;linear&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			timeout: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;5 minutes&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/build/workers-api/#rollback-options&quot;&gt;回滚选项&lt;/a&gt;了解更多信息。&lt;/p&gt;</description><pubDate>Tue, 23 Jun 2026 12:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category></item><item><title>Data Localization Suite - 针对 Regional Services 的 Regionalized IP Bindings</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-23-regionalized-ip-bindings/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-23-regionalized-ip-bindings/</guid><description>&lt;p&gt;Regional Services 现在支持 &lt;strong&gt;Regionalized IP Bindings&lt;/strong&gt;，让您能够针对通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/byoip/&quot;&gt;Bring Your Own IP (BYOIP)&lt;/a&gt; 引入 Cloudflare 的前缀在 IP 层实现流量区域化。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/data-localization/regional-services/regional-hostnames/&quot;&gt;Regional Hostnames&lt;/a&gt; 是按主机名对流量进行区域化，而 Regionalized IP Bindings 允许您将来自前缀之一的 CIDR 绑定（binding）到某个区域 —— 这非常适合地址映射部署以及任何您通过 IP 而非主机名寻址的服务。然后，Cloudflare 会在 TLS 终止后，仅在该区域的数据中心内处理发往这些地址的流量。&lt;/p&gt;
&lt;p&gt;Regionalized IP Bindings 需要 Regional Services 和 Regional Services for BYOIP 的授权。请联系您的账户团队以启用它们。&lt;/p&gt;
&lt;p&gt;要开始使用，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/data-localization/regional-services/ip-bindings/&quot;&gt;Regionalized IP Bindings&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate><product>Data Localization Suite</product><category>Data Localization Suite</category></item><item><title>Speed - Cloudflare AMP/SXG 现已生命周期结束。</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-23-amp-sxg-end-of-life/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-23-amp-sxg-end-of-life/</guid><description>&lt;p&gt;Cloudflare 加速移动页面（AMP）和签名交换（SXG）支持已达生命周期终点。这些功能自 2025 年 10 月起就已被禁用，因此配置了这些功能的客户应该不会看到其流量有任何变化。&lt;/p&gt;
&lt;p&gt;客户将无法再通过 API 或规则集配置 AMP/SXG。Zone API 将开始报错。包含 SXG 配置的规则集在移除 SXG 之前将无法保存。&lt;/p&gt;</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate><product>Speed</product><category>Speed</category></item><item><title>WAF - WAF 发布 - 2026-06-23</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-23-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-23-waf-release/</guid><description>
&lt;p&gt;本周的发布引入了新的托管防护，以解决 Ivanti Sentry 中的关键身份验证前 OS 命令注入漏洞（CVE-2026-10520）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2026-10520: Ivanti Sentry 中的 OS 命令注入漏洞允许远程、未经身份验证的攻击者以 root 权限执行任意系统命令。该缺陷源于内部配置处理期间解析的输入字符串清理不当。&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;500a90789f874345b60b0de7242fdf83&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...242fdf83&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Ivanti Sentry - Command Injection - CVE:CVE-2026-10520&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>R2 SQL - R2 SQL 现在支持窗口函数、DISTINCT 和集合操作</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-21-window-functions-distinct-set-operations/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-21-window-functions-distinct-set-operations/</guid><description>&lt;p&gt;R2 SQL 现在支持窗口函数、&lt;code&gt;SELECT DISTINCT&lt;/code&gt;、集合操作和更多聚合，使得编写分析查询变得更加容易，而无需在其他地方预处理数据。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt; 是 Cloudflare 的无服务器分布式 SQL 引擎，用于查询存储在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 中的 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 表。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新功能&quot;&gt;新功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;窗口函数&lt;/strong&gt; — &lt;code&gt;ROW_NUMBER&lt;/code&gt;、&lt;code&gt;RANK&lt;/code&gt;、&lt;code&gt;DENSE_RANK&lt;/code&gt;、&lt;code&gt;PERCENT_RANK&lt;/code&gt;、&lt;code&gt;CUME_DIST&lt;/code&gt;、&lt;code&gt;NTILE&lt;/code&gt;、&lt;code&gt;LAG&lt;/code&gt;、&lt;code&gt;LEAD&lt;/code&gt;、&lt;code&gt;FIRST_VALUE&lt;/code&gt;、&lt;code&gt;LAST_VALUE&lt;/code&gt;、&lt;code&gt;NTH_VALUE&lt;/code&gt;，以及带有 &lt;code&gt;OVER (...)&lt;/code&gt; 子句的聚合，包括 &lt;code&gt;PARTITION BY&lt;/code&gt; 和显式窗口范围（frames）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;QUALIFY&lt;/strong&gt; — 根据窗口函数结果过滤行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DISTINCT&lt;/strong&gt; — &lt;code&gt;SELECT DISTINCT&lt;/code&gt;、&lt;code&gt;DISTINCT ON (...)&lt;/code&gt; 以及聚合上的 &lt;code&gt;DISTINCT&lt;/code&gt; 修饰符（例如 &lt;code&gt;COUNT(DISTINCT ...)&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;集合操作&lt;/strong&gt; — &lt;code&gt;UNION&lt;/code&gt;、&lt;code&gt;UNION ALL&lt;/code&gt;、&lt;code&gt;INTERSECT&lt;/code&gt; 和 &lt;code&gt;EXCEPT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分组扩展&lt;/strong&gt; — &lt;code&gt;GROUPING SETS&lt;/code&gt;、&lt;code&gt;ROLLUP&lt;/code&gt; 和 &lt;code&gt;CUBE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;精确聚合&lt;/strong&gt; — &lt;code&gt;MEDIAN&lt;/code&gt;、&lt;code&gt;PERCENTILE_CONT&lt;/code&gt;、&lt;code&gt;ARRAY_AGG&lt;/code&gt; 和 &lt;code&gt;STRING_AGG&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;示例&quot;&gt;示例&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#示例&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;使用窗口函数对行进行排名&quot;&gt;使用窗口函数对行进行排名&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#使用窗口函数对行进行排名&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; customer_id, region,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;       ROW_NUMBER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;OVER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;PARTITION&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; region &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; total_amount &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; rank_in_region&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;使用-qualify-进行过滤&quot;&gt;使用 QUALIFY 进行过滤&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#使用-qualify-进行过滤&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; customer_id, region, total_amount&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;QUALIFY &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;ROW_NUMBER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;OVER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;PARTITION&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; region &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; total_amount &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;使用集合操作组合表&quot;&gt;使用集合操作组合表&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#使用集合操作组合表&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; customer_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;EXCEPT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; customer_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;archived_sales&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;不支持具名 &lt;code&gt;WINDOW&lt;/code&gt; 子句 — 请在每个调用点内联 &lt;code&gt;OVER (...)&lt;/code&gt; 规范。有关完整语法参考，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/sql-reference/&quot;&gt;SQL 参考&lt;/a&gt;。有关支持的功能和性能指南，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/reference/limitations-best-practices/&quot;&gt;限制与最佳实践&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><product>R2 SQL</product><category>R2 SQL</category></item><item><title>Cloudflare Mesh, Cloudflare Tunnel, Cloudflare WAN, Cloudflare One - 在仪表板中通过单页面管理您的所有路由</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-19-unified-routes-page/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-19-unified-routes-page/</guid><description>
&lt;p&gt;Cloudflare 仪表板中的 **Routes（路由）**页面现在在单个表格中显示您所有连接器的路由——包括 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot;&gt;Cloudflare Mesh&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; 路由，以及 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/&quot;&gt;Cloudflare WAN&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/magic-transit/&quot;&gt;Magic Transit&lt;/a&gt; 静态路由，而不是每个产品分别显示独立的路由视图。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/2026-06-19-unified-routes.B3igBY20_Z1awHp.webp&quot; alt=&quot;Cloudflare 仪表板中统一的 Routes 页面，在单个表格中显示各个连接器的路由&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1800&quot; height=&quot;948&quot;&gt;
&lt;p&gt;在统一的 Routes 页面中，您可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;通过交互式地图可视化您的网络&lt;/strong&gt;，该地图显示了您的目的地如何流向您的连接器——包括由多个连接器提供相同前缀服务的等价多路径（ECMP）路由。选择一个节点以过滤表格以显示其后面的路由。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;在单个表格中查看每条路由&lt;/strong&gt;，及其目的地、类型、连接器、优先级和来源，并进行过滤或排序以找到您需要的内容。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;创建、编辑和删除路由&lt;/strong&gt;（支持任何受支持的类型），而无需离开页面。添加 Cloudflare WAN 或 Magic Transit 静态路由时，您现在可以通过&lt;strong&gt;连接器名称&lt;/strong&gt;选择下一跳，而无需输入其 IP。&lt;/li&gt;
&lt;li&gt;在专用选项卡中&lt;strong&gt;管理&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/virtual-networks/&quot;&gt;虚拟网络&lt;/a&gt;&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;测试路由&lt;/strong&gt;，以便在提交更改之前查看目的地解析为哪个连接器和下一跳。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要找到它，请前往仪表板侧边栏中的 &lt;strong&gt;Networking（网络）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Routes（路由）&lt;/strong&gt;。&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/magic-networks/routes&quot; data-nb-button class=&quot;group inline-flex w-max shrink-0 items-center justify-center rounded-full font-medium whitespace-nowrap no-underline shadow-xs transition-colors cursor-pointer select-none focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary-hover h-9 gap-1.5 px-3 text-sm&quot; target=&quot;_blank&quot;&gt;Go to &lt;strong&gt;Routes&lt;/strong&gt;&amp;nbsp;&amp;#8599;&lt;/a&gt;
&lt;p&gt;您现有的路由、API 和配置保持不变——这是一个将它们聚集在一个地方的仪表板体验。了解如何&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/routes/add-routes/&quot;&gt;添加路由&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/virtual-networks/&quot;&gt;管理虚拟网络&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare Mesh</product><category>Cloudflare Mesh</category><category>Cloudflare Tunnel</category><category>Cloudflare WAN</category><category>Cloudflare One</category></item><item><title>Durable Objects, Workers - 新增亚太地区位置提示：apac-ne 和 apac-se</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-19-apac-ne-apac-se-location-hints/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-19-apac-ne-apac-se-location-hints/</guid><description>&lt;p&gt;Durable Objects 现在支持两个针对亚太地区的新位置提示：&lt;code&gt;apac-ne&lt;/code&gt;（东北亚）和 &lt;code&gt;apac-se&lt;/code&gt;（东南亚）。当您希望在亚太地区内进行更细粒度的托管放置，而不是使用更宽泛的 &lt;code&gt;apac&lt;/code&gt; 提示时，请使用 &lt;code&gt;apac-ne&lt;/code&gt; 或 &lt;code&gt;apac-se&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;像使用任何其他 &lt;code&gt;locationHint&lt;/code&gt; 一样使用这些新提示：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// 东北亚（日本、韩国等）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; stubNE&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(id, { locationHint: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;apac-ne&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// 东南亚（新加坡、印度尼西亚等）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; stubSE&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(id, { locationHint: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;apac-se&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; });&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;如果您的用户分布在整个亚太地区，现有的 &lt;code&gt;apac&lt;/code&gt; 提示仍是正确的选择。只有当您的流量明显集中在某一个子区域，且您希望将该受众的往返时间降至最低时，才使用 &lt;code&gt;apac-ne&lt;/code&gt; 或 &lt;code&gt;apac-se&lt;/code&gt;。默认行为以及我们通常建议的做法是，除非绝对需要，否则不添加位置提示，这将在尽可能靠近发起请求的地方创建 Durable Object 以减少延迟。&lt;/p&gt;
&lt;p&gt;与所有位置提示一样，这些都是尽力而为的建议。Cloudflare 会将 Durable Object 放置在附近的数据中心，而不一定是提示的确切位置。&lt;/p&gt;
&lt;p&gt;如需查看支持的提示的完整列表，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/reference/data-location/#provide-a-location-hint&quot;&gt;数据位置 — 提供位置提示&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Durable Objects - 出站连接使 Durable Objects 保持存活</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-19-outbound-connections-keep-dos-alive/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-19-outbound-connections-keep-dos-alive/</guid><description>&lt;p&gt;现在，通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/runtime-apis/tcp-sockets/&quot;&gt;&lt;code&gt;connect()&lt;/code&gt;&lt;/a&gt; 或出站 WebSocket 创建的活动出站连接在持续期间，Durable Objects 将保持存活。此前，即使对象具有打开的出站连接，Durable Object 也会在 70-140 秒无入站流量后被逐出，而这在使用 TCP 或出站 WebSocket 从大型语言模型 (LLM) 流式传输响应时是一种常见模式。&lt;/p&gt;
&lt;p&gt;通过此更改，每个活动的出站连接都可以防止被逐出。一旦所有出站连接关闭，在 Durable Object 被逐出之前将适用标准的 70-140 秒空闲窗口。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;更改前流式传输连接因逐出而中断&quot;&gt;更改前：流式传输连接因逐出而中断&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#更改前流式传输连接因逐出而中断&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/outbound-connection-before.DpePflZI_VwYag.svg&quot; alt=&quot;时间线显示 Durable Object 在最后一次入站请求后 70-140 秒被逐出，在出站连接仍处于打开状态时中断了进行中的 LLM 流&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;820&quot; height=&quot;360&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;更改后活动的出站连接使-durable-object-保持存活&quot;&gt;更改后：活动的出站连接使 Durable Object 保持存活&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#更改后活动的出站连接使-durable-object-保持存活&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/outbound-connection-after.Bn9BVcYz_VwYag.svg&quot; alt=&quot;时间线显示由于活动连接使 Durable Object 保持存活，相同的出站流顺利完成，空闲窗口仅在连接关闭后才开始&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;820&quot; height=&quot;360&quot;&gt;
&lt;p&gt;如果您正在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/&quot;&gt;Cloudflare 上构建智能体（Agent）&lt;/a&gt;，这一点尤为重要。在&lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/concepts/calling-llms/&quot;&gt;调用模型&lt;/a&gt;时从 LLM 流式传输 Token 的智能体，或者通过出站连接执行&lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/concepts/agentic-patterns/long-running-agents/&quot;&gt;长时间运行的任务&lt;/a&gt;的智能体，现在会在该连接持续期间保持存活，而不是在中途被逐出。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;限制：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个出站连接最多可使 Durable Object 保持存活 &lt;strong&gt;15 分钟&lt;/strong&gt;。15 分钟后，该连接将不再防止逐出（连接本身将继续运行），并恢复&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/concepts/durable-object-lifecycle/&quot;&gt;标准逐出规则&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;Durable Object 现有的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/platform/limits/&quot;&gt;每个账户实例限制&lt;/a&gt;仍然适用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/concepts/durable-object-lifecycle/&quot;&gt;Durable Object 的生命周期&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category></item><item><title>Workers - 适用于 AI 智能体（agent）部署的临时账户</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-19-temporary-accounts-for-agents/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-19-temporary-accounts-for-agents/</guid><description>&lt;p&gt;AI 智能体（agent）现在可以直接向 Cloudflare 部署 Workers，而无需用户先进行注册、打开基于浏览器的 OAuth 流程、点击仪表板或创建 API 令牌（API token）。当智能体尝试在没有 Cloudflare 凭证的情况下进行部署时，Wrangler 可以指示其使用 &lt;code&gt;--temporary&lt;/code&gt; 重新运行，然后将 Worker 部署到临时预览账户中。&lt;/p&gt;
&lt;p&gt;要在您的智能体中尝试此操作，请更新到 Wrangler 4.102.0 或更高版本，确保您已退出登录（&lt;code&gt;wrangler logout&lt;/code&gt;），然后让您的智能体构建某些内容并将其部署到 Cloudflare。该智能体应当遵循 Wrangler 的输出并使用 &lt;code&gt;--temporary&lt;/code&gt; 标志进行部署。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/claim-deployments-flow.Co0tUHG4_g1dGj.webp&quot; alt=&quot;图表显示 AI 智能体部署、验证并重新部署 Worker 到临时账户，然后在身份验证后认领它并将其移动到永久账户&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1748&quot; height=&quot;368&quot;&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; deploy&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --temporary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;临时部署将保持在线 60 分钟。在此窗口期间，智能体可以验证 Worker、重新部署更改，并返回在线 Worker URL 和认领 URL。打开认领 URL 允许您登录或创建 Cloudflare 账户，并将临时账户转为永久账户。&lt;/p&gt;
&lt;p&gt;临时预览账户目前支持有限的一组产品，包括 Workers、Workers Static Assets、Workers KV、D1、Durable Objects、Hyperdrive、Queues 和 SSL/TLS 证书。有关支持的产品、限制和认领行为，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/platform/claim-deployments/&quot;&gt;认领部署（临时账户）&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;有关更多背景信息，请参阅 &lt;a href=&quot;https://blog.cloudflare.com/temporary-accounts/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Temporary Cloudflare Accounts for Agents&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One, Access - Cloudflare 身份提供商现在是新账户的默认选择</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-cloudflare-idp-default/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-cloudflare-idp-default/</guid><description>&lt;p&gt;当您创建新的 Zero Trust 组织时，Cloudflare 现在会将 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/identity-providers/cloudflare/&quot;&gt;Cloudflare 身份提供商&lt;/a&gt;添加为您的默认登录方式。先前，新的组织会以 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/identity-providers/one-time-pin/&quot;&gt;一次性 PIN 码 (OTP)&lt;/a&gt; 开始。&lt;/p&gt;
&lt;p&gt;使用 Cloudflare 身份提供商，您的用户将使用其现有的 Cloudflare 账户凭证进行身份验证，并且身份验证仅限于您账户的成员。您仍然可以在需要时随时添加 OTP 或连接任何&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/identity-providers/&quot;&gt;第三方身份提供商&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;此更改仅适用于新创建的账户。现有组织将保留其已配置的登录方式。如果您想在现有账户中使用 Cloudflare 身份提供商，则必须将其启用。&lt;/p&gt;</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Access</category></item><item><title>Containers - Containers 现已支持 exec()</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-container-exec/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-container-exec/</guid><description>
&lt;p&gt;&lt;code&gt;exec()&lt;/code&gt; 现已用于 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/&quot;&gt;Containers&lt;/a&gt;。使用 &lt;code&gt;this.ctx.container.exec()&lt;/code&gt; 在正在运行的 Container 中启动进程、流式传输标准输入和输出、检查退出状态码以及向每个进程发送信号。&lt;/p&gt;
&lt;p&gt;在继承 &lt;code&gt;Container&lt;/code&gt; 的类中，或在另一个 Durable Object 中通过 &lt;code&gt;this.ctx.container&lt;/code&gt; 调用 &lt;code&gt;exec()&lt;/code&gt;。关联的 Container 必须已在运行。&lt;/p&gt;
&lt;p&gt;此示例在需要时启动 Container，然后读取其 Node.js 版本：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;js&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.js&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Container } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/containers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; MyContainer&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Container&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; readVersion&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		if&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx.container.running) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; process&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx.container.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;node&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;--version&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; output&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; process.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; decoder&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; TextDecoder&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			exitCode: output.exitCode,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			stdout: decoder.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;decode&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(output.stdout),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			stderr: decoder.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;decode&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(output.stderr),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.ts&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Container } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/containers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; MyContainer&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Container&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; readVersion&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		if&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx.container.running) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; process&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx.container.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;node&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;--version&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; output&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; process.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; decoder&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; TextDecoder&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			exitCode: output.exitCode,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			stdout: decoder.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;decode&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(output.stdout),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			stderr: decoder.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;decode&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(output.stderr),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;命令数组直接启动可执行文件，没有隐式的 shell。如果需要管道、重定向或变量展开，请显式调用 shell。&lt;/p&gt;
&lt;p&gt;一个 RPC 方法可以在一次调用者到 Durable Object 的往返中协调多个 &lt;code&gt;exec()&lt;/code&gt; 调用。它还可以传递面向字节的 &lt;code&gt;ReadableStream&lt;/code&gt; 输入或返回具有流量控制的流式输出。&lt;/p&gt;
&lt;p&gt;有关选项和流式传输示例，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/execute-commands/&quot;&gt;执行命令&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Hyperdrive, Workers - 创建 PlanetScale Postgres 和 MySQL 数据库，统一记入您的 Cloudflare 账户账单</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-planetscale-databases-cloudflare-billing/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-planetscale-databases-cloudflare-billing/</guid><description>
&lt;p&gt;作为一个按需付费（pay-as-you-go）客户，您可以从 Cloudflare 创建 PlanetScale Postgres 和 MySQL 数据库，并通过您的 Cloudflare 账户结算 PlanetScale 数据库的使用费用。Cloudflare 合约客户将能够在 7 月份将 PlanetScale 的使用额度添加到其合约中，因此如果有兴趣，请联系您的 Cloudflare 账户团队。&lt;/p&gt;
&lt;p&gt;从 Cloudflare 仪表板创建 PlanetScale 数据库，以体验针对区域数据访问进行了优化的全球分布式 Workers。&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/hyperdrive?modal=1&amp;amp;type=planetscale&amp;amp;step=1&quot; data-nb-button class=&quot;group inline-flex w-max shrink-0 items-center justify-center rounded-full font-medium whitespace-nowrap no-underline shadow-xs transition-colors cursor-pointer select-none focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary-hover h-9 gap-1.5 px-3 text-sm&quot; target=&quot;_blank&quot;&gt;Go to &lt;strong&gt;Create a PlanetScale database&lt;/strong&gt;&amp;nbsp;&amp;#8599;&lt;/a&gt;&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/planetscale-request-flow.CchJ2m4p_oDDMJ.svg&quot; alt=&quot;用户到 Workers、Hyperdrive 缓存、连接池和 PlanetScale 的请求流。&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;240&quot;&gt;
&lt;p&gt;从 Cloudflare 创建的 PlanetScale 数据库通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/hyperdrive/&quot;&gt;Hyperdrive&lt;/a&gt; 与 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/&quot;&gt;Workers&lt;/a&gt; 协同工作。Hyperdrive 管理数据库连接池和查询缓存，因此您可以将 PlanetScale 用作 Workers 应用程序的集中式关系数据库，而无需更改数据库驱动程序、对象关系映射 (ORM) 库或 SQL 工具。&lt;/p&gt;
&lt;p&gt;PlanetScale 的使用情况将在每个计费周期以美元总额的形式显示在您的 Cloudflare 发票上，价格遵循 PlanetScale 的标准&lt;a href=&quot;https://planetscale.com/pricing&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;定价&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。您可以通过 PlanetScale 的&lt;a href=&quot;https://planetscale.com/docs/billing#organization-usage-and-billing-page&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;仪表板&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;自检每个数据库的计费使用情况。&lt;/p&gt;
&lt;p&gt;当您从 Cloudflare 仪表板创建 PlanetScale 数据库时，您将获得相同的 PlanetScale 开发人员体验，包括开发分支、查询洞察以及针对 Agent 的 Model Context Protocol (MCP) 服务端支持。&lt;/p&gt;
&lt;p&gt;要开始使用，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/hyperdrive/planetscale/&quot;&gt;PlanetScale Postgres and MySQL with Hyperdrive&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category><category>Workers</category></item><item><title>Radar - Cloudflare Radar 更新 Workers AI 热度指标</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-radar-workers-ai-inference-metric/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-radar-workers-ai-inference-metric/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; 已更改衡量 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt; 模型和任务热度的方式。&lt;/p&gt;
&lt;p&gt;此前，热度以针对每个模型或任务执行推理的唯一账户数量为依据。现在改为以&lt;strong&gt;推理次数&lt;/strong&gt;为依据，能更准确地反映实际使用量。此变更将影响所有新测量数据以及历史数据。因此，Radar 上显示的模型和任务分布可能与之前有所不同，历史趋势也可能随之改变。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://radar.cloudflare.com/ai-insights#workers-ai-model-popularity&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Workers AI 模型热度&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;图表显示各模型的推理次数分布。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/workers-ai-model-popularity.CMw_WVXg_Tjg4b.webp&quot; alt=&quot;AI Insights 页面上 Workers AI 模型热度图表截图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;938&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://radar.cloudflare.com/ai-insights#workers-ai-task-popularity&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Workers AI 任务热度&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;图表显示各任务的推理次数分布。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/workers-ai-task-popularity.ZoA-NO8k_ZVCPD5.webp&quot; alt=&quot;AI Insights 页面上 Workers AI 任务热度图表截图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;938&quot;&gt;
&lt;p&gt;相同数据可通过以下 API 端点获取：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/radar/subresources/ai/subresources/inference/methods/summary_v2/&quot;&gt;&lt;code&gt;/ai/inference/summary/{dimension}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/radar/subresources/ai/subresources/inference/methods/timeseries_groups_v2/&quot;&gt;&lt;code&gt;/ai/inference/timeseries_groups/{dimension}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 &lt;a href=&quot;https://radar.cloudflare.com/ai-insights&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AI Insights 页面&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;探索相关数据。&lt;/p&gt;</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Speed - Cloudflare Fonts 错误处理和安全性改进</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-cloudflare-fonts-error-handling-security/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-18-cloudflare-fonts-error-handling-security/</guid><description>&lt;p&gt;当遇到无效路径或意外运行时错误时，Cloudflare Fonts 现在会将 &lt;code&gt;/cf-fonts&lt;/code&gt; 请求转发到您的源站服务器，而不是直接返回 4xx 或 5xx 响应。此更新还添加了附加的输入验证以增强安全性。&lt;/p&gt;</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><product>Speed</product><category>Speed</category></item><item><title>Artifacts - 从 Cloudflare 仪表板管理 Artifacts</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-17-dashboard-management/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-17-dashboard-management/</guid><description>&lt;p&gt;您现在可以直接从 Cloudflare 仪表板配置 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/artifacts/concepts/how-artifacts-works/&quot;&gt;Artifacts&lt;/a&gt; 命名空间、仓库和令牌。&lt;/p&gt;
&lt;p&gt;Artifacts 是兼容 Git 的存储，允许您将仓库存储在 Cloudflare 上，并使用标准 Git 工作流与它们进行交互。&lt;/p&gt;
&lt;p&gt;您可以查看和创建&lt;a href=&quot;https://cloudflaredoc.ubitools.com/artifacts/concepts/namespaces/#use-namespaces-as-containers&quot;&gt;命名空间&lt;/a&gt;，它们是仓库的顶级容器：&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/dashboard-namespaces.0BJelWZh_Z1uJ1iD.webp&quot; alt=&quot;Artifacts 命名空间仪表板，显示命名空间搜索和创建命名空间控件&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1804&quot; height=&quot;598&quot;&gt;
&lt;p&gt;您可以查看、创建、派生和搜索命名空间内的仓库：&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/dashboard-repositories.M9P9JUL__Agf9h.webp&quot; alt=&quot;Artifacts 仓库仪表板，显示仓库来源、访问权限和创建时间列&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1874&quot; height=&quot;592&quot;&gt;
&lt;p&gt;您可以打开仓库以查看其文件并复制其 Git 远程 URL。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/dashboard-repo-overview.CSHxrCW2_81obq.webp&quot; alt=&quot;Artifacts 仓库概览，显示文件、提交、令牌管理和快速操作&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2194&quot; height=&quot;806&quot;&gt;
&lt;p&gt;您还可以直接从仪表板配置令牌，以将 Git 访问权限范围限定为单个仓库，包括用于 clone、fetch 和 pull 工作流的只读令牌，或者当客户端需要推送更改时所需的写入令牌。&lt;/p&gt;
&lt;p&gt;要开始使用，请转到 &lt;a href=&quot;https://dash.cloudflare.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare 仪表板&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;，然后选择 &lt;strong&gt;Storage &amp;amp; databases（存储和数据库）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Artifacts&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果您已加入 Artifacts Beta 测试，您可以使用该仪表板来设置 Artifacts。如果您想加入 Beta 测试，请填写&lt;a href=&quot;https://forms.gle/DwBoPRa3CWQ8ajFp7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;申请表&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 17 Jun 2026 12:00:00 GMT</pubDate><product>Artifacts</product><category>Artifacts</category></item><item><title>SSL/TLS - 针对经身份验证的源站拉取和自定义源站信任存储的后量子 ML-DSA 证书</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-17-pqc-mldsa-aop-cots/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-17-pqc-mldsa-aop-cots/</guid><description>&lt;p&gt;Cloudflare 现在在 Cloudflare 边缘与您的源站服务器之间的连接上接受 &lt;a href=&quot;https://csrc.nist.gov/pubs/fips/204/final&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ML-DSA&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; (FIPS 204) 后量子证书。结合我们现有的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ssl/post-quantum-cryptography/#hybrid-key-agreement&quot;&gt;X25519MLKEM768&lt;/a&gt; 密钥协商，这使您能够在 Cloudflare 到源站的连接上建立端到端后量子身份验证。&lt;/p&gt;
&lt;p&gt;ML-DSA 在两个面向源站的功能中得到支持：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ssl/origin-configuration/authenticated-origin-pull/&quot;&gt;经身份验证的源站拉取&lt;/a&gt; (AOP) — 上传一个 ML-DSA 客户端证书，Cloudflare 将在向您的源站进行 mTLS 握手期间出示该证书。可在区域（zone）级别和每个主机名范围内使用。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ssl/origin-configuration/custom-origin-trust-store/&quot;&gt;自定义源站信任存储&lt;/a&gt; (COTS) — 上传一个 ML-DSA 证书颁发机构，Cloudflare 在&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ssl/origin-configuration/ssl-modes/full-strict/&quot;&gt;完全（严格）加密模式&lt;/a&gt; 下验证您的源站服务器证书时将信任该机构。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关证书生成和设置指导，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ssl/post-quantum-cryptography/pqc-to-origin/#post-quantum-signatures&quot;&gt;后量子签名&lt;/a&gt;；有关 Cloudflare 当前后量子部署状态，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ssl/post-quantum-cryptography/pqc-cloudflare-products/&quot;&gt;Cloudflare 产品中的 PQC&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate><product>SSL/TLS</product><category>SSL/TLS</category></item><item><title>Agents, Workers - Agents SDK 改进了浏览器自动化、代码执行和恢复功能</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-agents-sdk-v0.16.1/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-agents-sdk-v0.16.1/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Agents SDK&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 的最新版本使得构建能够安全地与真实系统交互且在中断时能够继续工作的 agent 变得更加容易。&lt;/p&gt;
&lt;p&gt;Agent 现在可以通过 Browser Run 浏览网站、通过 Code Mode 针对外部工具编写代码、在委托给 Think 子 agent 时使用客户端提供的工具，并在从部署、Durable Object 驱逐以及连接流失中恢复时更加可靠。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;更安全的浏览器自动化&quot;&gt;更安全的浏览器自动化&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#更安全的浏览器自动化&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Agent 现在可以通过单个持久化的 &lt;code&gt;browser_execute&lt;/code&gt; 工具来使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/&quot;&gt;Browser Run&lt;/a&gt;。模型无需从固定的操作列表中进行选择，而是可以针对 Chrome DevTools Protocol (CDP) 编写代码，并可以检查页面、捕获屏幕截图、读取渲染的内容、调试前端行为以及与实时浏览器会话进行交互。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; browserTools&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; createBrowserTools&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	ctx: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	browser: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;BROWSER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	loader: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;LOADER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	session: { mode: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;dynamic&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; browserTools&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; createBrowserTools&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	ctx: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	browser: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;BROWSER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	loader: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;LOADER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	session: { mode: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;dynamic&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;浏览器会话可以是一次性的、重用的，或者在运行期间从一次性提升为持久化的。当 agent 需要人工登录、完成多因素身份验证（MFA）或批准敏感操作时，这非常有用。运行可以暂停，保持相同的标签页和 Cookie，并在批准后恢复。&lt;/p&gt;
&lt;p&gt;浏览器工具还为单次浏览任务添加了 Live View URL、可选的会话记录以及 &lt;code&gt;browser_markdown&lt;/code&gt;、&lt;code&gt;browser_extract&lt;/code&gt;、&lt;code&gt;browser_links&lt;/code&gt; 和 &lt;code&gt;browser_scrape&lt;/code&gt; 等快速操作。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;具有批准的可恢复代码执行&quot;&gt;具有批准的可恢复代码执行&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#具有批准的可恢复代码执行&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Code Mode 现在使用 &lt;code&gt;createCodemodeRuntime&lt;/code&gt;、连接器和持久化的执行日志。这让您只需为模型提供一个 &lt;code&gt;codemode&lt;/code&gt; 工具，而不是满是工具定义的庞大 Prompt。模型可以发现它需要的功能、针对类型化的全局变量编写代码并重用保存的代码片段。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; runtime&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; createCodemodeRuntime&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	ctx: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	executor: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; DynamicWorkerExecutor&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ loader: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;LOADER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	connectors: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; GithubConnector&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env, connection)],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; result&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; streamText&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	model,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	messages,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	tools: { codemode: runtime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;tool&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; runtime&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; createCodemodeRuntime&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	ctx: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	executor: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; DynamicWorkerExecutor&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ loader: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;LOADER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	connectors: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; GithubConnector&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.ctx, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env, connection)],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; result&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; streamText&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	model,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	messages,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	tools: { codemode: runtime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;tool&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;当代码执行到受批准限制的操作时，运行时会暂停执行并返回一个待处理的批准。批准后，已完成的调用将从持久化日志中回放，运行获得批准的操作，然后继续执行相同的代码。这使得构建创建议题（issues）、更新外部系统或执行其他副作用的 agent 变得非常实用，而无需为每个工具都编写自定义的暂停和恢复逻辑。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;更好的-think-委托&quot;&gt;更好的 Think 委托&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#更好的-think-委托&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Think 子 agent 现在可以通过 RPC &lt;code&gt;chat()&lt;/code&gt; 路径使用客户端定义的工具。父 agent 可以通过 &lt;code&gt;clientTools&lt;/code&gt; 传递工具 schema，并通过 &lt;code&gt;onClientToolCall&lt;/code&gt; 解析工具调用。这使得被委托的 agent 能够使用调用者提供的功能，而无需浏览器 WebSocket。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; child.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;chat&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(message, callback, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	signal,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	clientTools: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;get_user_timezone&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			description: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Get the caller&apos;s timezone&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			parameters: { type: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;object&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	onClientToolCall&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; ({ &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;toolName&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; runClientTool&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(toolName, input);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; child.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;chat&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(message, callback, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	signal,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	clientTools: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;get_user_timezone&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			description: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Get the caller&apos;s timezone&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			parameters: { type: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;object&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	onClientToolCall&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; ({ &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;toolName&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; runClientTool&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(toolName, input);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Think Workflows 还改进了 &lt;code&gt;step.prompt()&lt;/code&gt;。Prompt 步骤现在会在返回结构化输出之前运行一个完整的 agent 轮次，因此 agent 可以在产生类型化结果之前调用工具。这使得 Workflow 步骤在持久的分流、研究和审批流中更加有用。&lt;/p&gt;
&lt;p&gt;在绑定 Browser Run 时，统一的 Think 执行工具还可以包含 &lt;code&gt;cdp.*&lt;/code&gt; 浏览器功能，以及 &lt;code&gt;state.*&lt;/code&gt; 和 &lt;code&gt;tools.*&lt;/code&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;voice-输出设备选择&quot;&gt;Voice 输出设备选择&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#voice-输出设备选择&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Voice 客户端可以将助手音频路由到特定的输出设备。在 &lt;code&gt;useVoiceAgent&lt;/code&gt; 中使用 &lt;code&gt;outputDeviceId&lt;/code&gt;，或者从与框架无关的客户端调用 &lt;code&gt;client.setOutputDevice()&lt;/code&gt;。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; voice&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; useVoiceAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	agent: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MyVoiceAgent&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	outputDeviceId: selectedSpeakerId,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;tsx&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;tsx&quot; data-nb-lang=&quot;tsx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; voice&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; useVoiceAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	agent: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MyVoiceAgent&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	outputDeviceId: selectedSpeakerId,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;不支持扬声器选择的浏览器将继续通过默认的输出设备播放，并报告非致命的 &lt;code&gt;outputDeviceError&lt;/code&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;可靠性修复&quot;&gt;可靠性修复&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#可靠性修复&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;此版本包括针对生产环境 agent 的多项修复：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;useAgent&lt;/code&gt; 和 &lt;code&gt;AgentClient&lt;/code&gt; 在重连和配置更改期间更可靠地处理 WebSocket 替换。&lt;/li&gt;
&lt;li&gt;聊天流回放在重连、部署和提供商错误后更加可靠。&lt;/li&gt;
&lt;li&gt;纤程（Fiber）恢复可以跨多通道扫描继续，并在恢复 Hook 持续失败时进行退避。&lt;/li&gt;
&lt;li&gt;即使启动拆卸的请求被取消，Agent 拆卸仍会继续。&lt;/li&gt;
&lt;li&gt;大型会话历史记录使用按字节预算的读取，以减少启动期间的内存压力。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;升级&quot;&gt;升级&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#升级&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;要更新到最新版本：&lt;/p&gt;
&lt;script&gt;
	if (!customElements.get(&quot;nb-pm-restore&quot;)) {
		customElements.define(
			&quot;nb-pm-restore&quot;,
			class extends HTMLElement {
				connectedCallback() {
					const card = this.closest(&quot;[data-nb-pm]&quot;);
					if (!card) return;
					let saved;
					try {
						saved = sessionStorage.getItem(&quot;ui-pm-tab&quot;);
					} catch {
						return;
					}
					if (!saved) return;
					const tabs = card.querySelectorAll(&quot;[data-nb-pm-tab]&quot;);
					let idx = -1;
					tabs.forEach(function (t, i) {
						if (t.textContent.trim() === saved) idx = i;
					});
					if (idx &lt; 1) return;
					tabs.forEach(function (t, i) {
						t.setAttribute(&quot;aria-selected&quot;, String(i === idx));
					});
					card.querySelectorAll(&quot;[data-nb-pm-panel]&quot;).forEach(function (p, i) {
						p.hidden = i !== idx;
					});
				}
			},
		);
	}
&lt;/script&gt;&lt;div data-nb-pm class=&quot;w-full&quot;&gt;&lt;div class=&quot;flex w-full flex-col overflow-hidden rounded-lg text-sm ring ring-border bg-card&quot;&gt;&lt;div class=&quot;flex items-center gap-2 px-3 py-2 text-[0.8125rem] font-medium leading-5 text-muted-foreground bg-[var(--nb-surface-sunken)]&quot; role=&quot;tablist&quot; aria-label=&quot;Package manager&quot;&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;true&quot; aria-controls=&quot;pm-panel-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-npm&quot; id=&quot;pm-tab-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-npm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;npm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-yarn&quot; id=&quot;pm-tab-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-yarn&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;yarn&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-pnpm&quot; id=&quot;pm-tab-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-pnpm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;pnpm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-bun&quot; id=&quot;pm-tab-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-bun&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;bun&lt;/button&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-npm&quot; aria-labelledby=&quot;pm-tab-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-npm&quot; data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; i agents@latest @cloudflare/think@latest @cloudflare/codemode@latest @cloudflare/ai-chat@latest @cloudflare/voice@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;npm i agents@latest @cloudflare/think@latest @cloudflare/codemode@latest @cloudflare/ai-chat@latest @cloudflare/voice@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;symbol id=&quot;ai:ph:copy&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;symbol id=&quot;ai:ph:check&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-yarn&quot; aria-labelledby=&quot;pm-tab-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-yarn&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest @cloudflare/ai-chat@latest @cloudflare/voice@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;yarn add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest @cloudflare/ai-chat@latest @cloudflare/voice@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-pnpm&quot; aria-labelledby=&quot;pm-tab-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-pnpm&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;pnpm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest @cloudflare/ai-chat@latest @cloudflare/voice@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;pnpm add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest @cloudflare/ai-chat@latest @cloudflare/voice@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-bun&quot; aria-labelledby=&quot;pm-tab-pm-3bb8cbb8-e74b-425d-bad4-05df0dff9107-bun&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;bun&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest @cloudflare/ai-chat@latest @cloudflare/voice@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;bun add agents@latest @cloudflare/think@latest @cloudflare/codemode@latest @cloudflare/ai-chat@latest @cloudflare/voice@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;nb-pm-restore style=&quot;display:contents&quot;&gt;&lt;/nb-pm-restore&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/package-managers/PackageManagers.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/tools/codemode/&quot;&gt;Code Mode 文档&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/tools/browser/&quot;&gt;浏览器工具文档&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/harnesses/think/tools/&quot;&gt;Think 工具文档&lt;/a&gt;以及 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/communication-channels/voice/&quot;&gt;Voice 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Cloudflare Images - Images 中的新优化功能</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-new-optimization-features/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-new-optimization-features/</guid><description>&lt;p&gt;这些更新为使用 Images 进行优化和操作引入了新功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;全新 &lt;code&gt;composite&lt;/code&gt; 选项&lt;/strong&gt;：控制&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/draw-overlays/#composite&quot;&gt;叠加层如何与底图混合&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;百分比宽度&lt;/strong&gt;：将叠加层的尺寸设置为&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/draw-overlays/#width-and-height&quot;&gt;底图尺寸的分数比例&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全新 &lt;code&gt;fit&lt;/code&gt; 模式&lt;/strong&gt;：使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/features/#aspect-crop&quot;&gt;&lt;code&gt;aspect-crop&lt;/code&gt;&lt;/a&gt; 始终保留目标宽高比，或使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/features/#scale-up&quot;&gt;&lt;code&gt;scale-up&lt;/code&gt;&lt;/a&gt; 始终放大图像。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全新 &lt;code&gt;upscale&lt;/code&gt; 参数&lt;/strong&gt;：应用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/features/#upscale&quot;&gt;AI 放大（upscaling）&lt;/a&gt;，在放大图像时产生更清晰、更细致的结果。&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare Images</product><category>Cloudflare Images</category></item><item><title>Workers, Agents, Workers AI - 在 Workers AI 上推出 GLM-5.2</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-glm-5.2-workers-ai/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-glm-5.2-workers-ai/</guid><description>&lt;p&gt;我们很高兴宣布在 Workers AI 上推出 &lt;strong&gt;GLM-5.2&lt;/strong&gt;，这是 Z.ai 的旗舰代理（agentic）编码模型。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/glm-5.2/&quot;&gt;&lt;code&gt;@cf/zai-org/glm-5.2&lt;/code&gt;&lt;/a&gt; 是一款专为代理型编码工作流构建的文本生成模型。凭借函数调用和推理支持，它可以处理长代码库、多步规划和工具增强型智能体。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关键特性和使用场景：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;代理编码&lt;/strong&gt;：专为自主编码任务、长周期规划和复杂的软件工程工作流而设计&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大型上下文窗口&lt;/strong&gt;：GLM-5.2 最多支持 1,048,576 个 token 的上下文窗口。Workers AI 推出该模型时提供 262,144 个 token 的上下文窗口，并计划在未来增加此限制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;函数调用&lt;/strong&gt;：构建可在多个对话轮次中调用工具和 API 的智能体&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理&lt;/strong&gt;：解决复杂的问题求解和分步推理任务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/configuration/bindings/&quot;&gt;Workers AI 绑定（binding）&lt;/a&gt; (&lt;code&gt;env.AI.run()&lt;/code&gt;)、REST API &lt;code&gt;/run&lt;/code&gt; 或 &lt;code&gt;/v1/chat/completions&lt;/code&gt;，或 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt; 来使用 GLM-5.2。&lt;/p&gt;
&lt;p&gt;定价可在&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/glm-5.2/&quot;&gt;模型页面&lt;/a&gt;或&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/platform/pricing/&quot;&gt;定价页面&lt;/a&gt;上找到。&lt;/p&gt;</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Agents</category><category>Workers AI</category></item><item><title>Workers VPC - 通过 VPC 网络上的 connect() 进行 TCP 连接</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-tcp-connect-vpc-networks/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-tcp-connect-vpc-networks/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-vpc/configuration/vpc-networks/&quot;&gt;VPC 网络（VPC Network）&lt;/a&gt; 绑定（binding）现在除了支持通过 &lt;code&gt;fetch()&lt;/code&gt; 进行 HTTP 流量传输外，还支持用于指向私有目标的原始 TCP 连接的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/runtime-apis/tcp-sockets/&quot;&gt;&lt;code&gt;connect()&lt;/code&gt;&lt;/a&gt; Socket API。&lt;/p&gt;
&lt;p&gt;这意味着 Workers 现在可以向通过绑定的 Cloudflare Tunnel、Cloudflare Mesh 或 Cloudflare WAN 接入端（on-ramp）可达的任何私有服务打开 TCP 套接字 —— 包括 Redis、Memcached、MQTT、自定义二进制协议或任何其他基于 TCP 的服务。&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;$schema&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;vpc_networks&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;PRIVATE_NETWORK&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;network_id&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;cf1:network&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;remote&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;vpc_networks&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;binding = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;PRIVATE_NETWORK&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;network_id = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;cf1:network&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;remote = &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;在运行时，在绑定上使用 &lt;code&gt;connect()&lt;/code&gt; 以向私有目标打开 TCP 套接字：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// Open a TCP connection to a private Redis instance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; socket&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;PRIVATE_NETWORK&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;10.0.1.50:6379&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// Write a Redis PING command&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; writer&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; socket.writable.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;getWriter&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; writer.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; TextEncoder&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;encode&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;PING&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; writer.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(socket.readable);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;aside role=&quot;note&quot; aria-label=&quot;说明&quot; class=&quot;aside-card flex items-start gap-3 rounded-lg px-4 py-3 my-4&quot; style=&quot;--_c: var(--nb-info); --_t: var(--nb-info-muted);&quot; data-astro-cid-znle5jil&gt;&lt;span class=&quot;flex h-[1.375em] shrink-0 items-center&quot; aria-hidden=&quot;true&quot; data-astro-cid-znle5jil&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[1em] w-[1em]&quot; data-astro-cid-znle5jil=&quot;true&quot; data-icon=&quot;ph:info&quot;&gt;&lt;symbol id=&quot;ai:ph:info&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m16-40a8 8 0 0 1-8 8a16 16 0 0 1-16-16v-40a8 8 0 0 1 0-16a16 16 0 0 1 16 16v40a8 8 0 0 1 8 8m-32-92a12 12 0 1 1 12 12a12 12 0 0 1-12-12&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:info&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;div class=&quot;flex min-w-0 flex-1 flex-col gap-0.5&quot; data-astro-cid-znle5jil&gt;&lt;p class=&quot;m-0 text-base leading-snug font-semibold&quot; data-astro-cid-znle5jil&gt;说明&lt;/p&gt;&lt;div class=&quot;aside-card-body text-sm leading-normal&quot; data-astro-cid-znle5jil&gt;&lt;p&gt;目前在 VPC 网络上进行的 &lt;code&gt;connect()&lt;/code&gt; 仅支持明文 TCP。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;有关更多详细信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-vpc/configuration/vpc-networks/&quot;&gt;VPC 网络（VPC Networks）&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-vpc/api/&quot;&gt;Workers 绑定（Binding）API&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><product>Workers VPC</product><category>Workers VPC</category></item><item><title>Workers - Workers 追踪现在支持自定义 span</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-custom-spans/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-16-custom-spans/</guid><description>&lt;p&gt;您现在可以使用 &lt;code&gt;tracing.enterSpan()&lt;/code&gt; 在您的 Workers 代码中创建自定义追踪 span。自定义 span 与自动平台检测（fetch 调用、KV 读取、D1 查询以及其他平台操作）一起显示在您的追踪和 OpenTelemetry 导出中，并具有正确的父子嵌套关系。&lt;/p&gt;
&lt;p&gt;该 API 可以通过 &lt;code&gt;import { tracing } from &quot;cloudflare:workers&quot;&lt;/code&gt; 或通过处理程序上下文 &lt;code&gt;ctx.tracing&lt;/code&gt; 访问：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { tracing } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;  async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; tracing.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;enterSpan&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;handleRequest&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;span&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;      span.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;setAttribute&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;url.path&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; URL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(request.url).pathname);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;      const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;MY_KV&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;      return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(data);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Span 根据 JavaScript 异步上下文自动嵌套，并在回调返回或其返回的 Promise 解决时自动结束。&lt;code&gt;Span&lt;/code&gt; 对象提供了 &lt;code&gt;setAttribute(key, value)&lt;/code&gt; 用于附加元数据，以及 &lt;code&gt;isTraced&lt;/code&gt; 属性用于检查当前请求是否正在被采样。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/wobs_custom_spans_screenshot.B-hsHjyv_ZGVlIY.webp&quot; alt=&quot;追踪瀑布图，显示与自动 KV 和 fetch 检测嵌套在一起的自定义 span&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1988&quot; height=&quot;670&quot;&gt;
&lt;p&gt;必须在您的 Wrangler 配置中&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/observability/traces/#how-to-enable-tracing&quot;&gt;启用追踪&lt;/a&gt;才能记录 span。&lt;/p&gt;
&lt;p&gt;有关完整的 API 详细信息和示例，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/observability/traces/custom-spans/&quot;&gt;自定义 span&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - 在 WAF 规则中使用 Cloudforce One 威胁情报</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-15-threat-intelligence-fields/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-15-threat-intelligence-fields/</guid><description>&lt;p&gt;您现在可以在 WAF 规则中针对 Cloudforce One 威胁情报匹配传入的请求。新的检测会在威胁情报数据库中查找每个请求的客户端 IP 地址。如果该 IP 在过去七天内参与了威胁活动，Cloudflare 将填充 &lt;code&gt;cf.intel.ip.*&lt;/code&gt; 字段，您可以在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/waf/custom-rules/&quot;&gt;自定义规则&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/waf/rate-limiting-rules/&quot;&gt;速率限制规则&lt;/a&gt; 中使用这些字段。&lt;/p&gt;
&lt;p&gt;该检测会填充以下字段。使用带有 &lt;code&gt;[*]&lt;/code&gt; 通配符的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ruleset-engine/rules-language/functions/#any&quot;&gt;&lt;code&gt;any()&lt;/code&gt;&lt;/a&gt; 函数来匹配数组值：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cf.intel.ip.datasets&lt;/code&gt; — 标记该 IP 地址的数据集（&lt;code&gt;ddos&lt;/code&gt; 或 &lt;code&gt;waf&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cf.intel.ip.target_industries&lt;/code&gt; — 该 IP 地址针对的行业。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cf.intel.ip.attacker_names&lt;/code&gt; — 与该 IP 地址关联的已知威胁活动者。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cf.intel.ip.attacker_countries&lt;/code&gt; — 威胁活动的来源国家/地区。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cf.intel.ip.target_countries&lt;/code&gt; — 该 IP 地址针对的国家/地区。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，以下自定义规则表达式会阻断来自与针对法国的 DDoS 活动相关联的 IP 地址的请求：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;any(cf.intel.ip.target_countries[*] == &quot;FR&quot;) and any(cf.intel.ip.datasets[*] == &quot;ddos&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这些字段适用于 Cloudflare API 和 Terraform。匹配项将记录在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/waf/analytics/security-analytics/&quot;&gt;安全分析&lt;/a&gt; 中。&lt;/p&gt;
&lt;p&gt;拥有活动 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/security-center/cloudforce-one/&quot;&gt;Cloudforce One&lt;/a&gt; 订阅的客户可以使用威胁情报检测。欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/waf/detections/threat-intelligence/&quot;&gt;威胁情报&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF 发布 - 2026-06-15</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-15-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-15-waf-release/</guid><description>
&lt;p&gt;本周的发布引入了新的托管防护，以解决 Ghost CMS 中的关键 SQL 注入漏洞（CVE-2026-26980），以及一条旨在识别和阻断利用混淆布尔逻辑的复杂 SQL 注入 (SQLi) 绕过尝试的新通用规则。这些规则在网络边缘保护受影响的安装免受未经授权的数据外泄。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2026-26980: Ghost CMS Content API（版本 3.24.0 至 6.19.0）中存在盲 SQL 注入漏洞，由于输入验证不当，允许未经身份验证的远程攻击者通过查询参数注入恶意 SQL 命令。&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;439c4ef64b32447989bdf412b4c29bc6&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...b4c29bc6&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Ghost CMS - SQLi - CVE:CVE-2026-26980&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;6c64b68ef5ed45e7a622cdaab56f403f&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...b56f403f&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;SQLi - Obfuscated Boolean - URI&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>AI Gateway - 在 AI Gateway 日志中查看请求的用户代理（User Agent）</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-12-user-agent-logging/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-12-user-agent-logging/</guid><description>&lt;p&gt;AI Gateway 日志现在能够捕获发起每个请求的客户端的用户代理（User Agent），从而更容易识别是哪个 SDK、库或应用程序发送了流经您网关的流量。例如，您可以区分来自 &lt;code&gt;openai-python&lt;/code&gt; 的请求与来自自定义应用程序或 Cloudflare Worker 的请求。&lt;/p&gt;
&lt;p&gt;用户代理会与每个日志条目中的其他详细信息一起显示，并且您可以在仪表板中按用户代理（等于、不等于或包含）对日志进行筛选。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-gateway/observability/logging/&quot;&gt;日志记录&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Durable Objects, Workers - 按对象 ID 或名称筛选 Durable Objects 指标</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-12-durable-objects-metrics-filter-by-id-name/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-12-durable-objects-metrics-filter-by-id-name/</guid><description>
&lt;p&gt;现在，您可以在 Cloudflare 仪表板中，按单个 Durable Object 的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/api/id/&quot;&gt;ID&lt;/a&gt; 或 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/api/id/#name&quot;&gt;名称&lt;/a&gt; 筛选 Durable Objects 命名空间的 &lt;strong&gt;指标&lt;/strong&gt; 选项卡。此前，指标图表仅显示聚合的命名空间级数据，因此很难隔离特定对象的行为。&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/durable-objects&quot; data-nb-button class=&quot;group inline-flex w-max shrink-0 items-center justify-center rounded-full font-medium whitespace-nowrap no-underline shadow-xs transition-colors cursor-pointer select-none focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary-hover h-9 gap-1.5 px-3 text-sm&quot; target=&quot;_blank&quot;&gt;Go to &lt;strong&gt;Durable Objects&lt;/strong&gt;&amp;nbsp;&amp;#8599;&lt;/a&gt;&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/durable-objects-metrics-dashboard.BFZTyhWU_Z2e46Sb.webp&quot; alt=&quot;已按 ID 筛选为单个对象的 Durable Objects 指标选项卡，按调用状态显示每个对象的请求和错误。&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2936&quot; height=&quot;1482&quot;&gt;
&lt;p&gt;开始在筛选器中输入 ID 或名称，然后从自动完成下拉列表中选择匹配项。自动完成仅显示在选定时间范围内有调用的对象，因此未出现的对象在该时间窗内未被调用。这并不一定意味着该对象已被删除。页面上的每个图表都会更新，以仅反映所选的对象。这使得在调试高流量对象、错误激增或意外存储使用时，更容易识别和调查单个 Durable Object。清除筛选器可返回命名空间级指标。&lt;/p&gt;
&lt;p&gt;指标由 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/analytics/graphql-api/&quot;&gt;GraphQL Analytics API&lt;/a&gt; 提供支持，因此适用标准的分析行为，例如摄取延迟和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/analytics/faq/graphql-api-inconsistent-results/&quot;&gt;采样&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/observability/metrics-and-analytics/&quot;&gt;指标和分析&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Terraform - Terraform v5.20.0 现已可用</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-12-terraform-v5.20.0-provider/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-12-terraform-v5.20.0-provider/</guid><description>&lt;p&gt;Cloudflare 的 Terraform v5 Provider 让开发人员能够轻松地使用配置即代码（configuration as code）方法来管理其 Cloudflare 基础设施。它每 &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5774&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2-3 周&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;发布一次，以确保您始终可以管理平台中的最新功能。本周，我们发布了 Terraform v5.20.0，其中添加了 24 个新资源，将底层的 Go SDK 升级到了 cloudflare-go v7，并根据社区反馈进行了一系列错误修复和状态升级。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新资源&quot;&gt;新资源&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新资源&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_ai_search_namespace:&lt;/strong&gt; 管理 AI Search 命名空间&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_custom_csr:&lt;/strong&gt; 管理自定义证书签名请求&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_dls_prefix_binding:&lt;/strong&gt; 管理 DLS 区域服务前缀绑定（binding）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_flagship_app:&lt;/strong&gt; 管理 Flagship 功能标志应用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_flagship_flag:&lt;/strong&gt; 管理 Flagship 功能标志&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_google_tag_gateway:&lt;/strong&gt; 管理 Google Tag Gateway&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_load_balancer_monitor_group:&lt;/strong&gt; 管理负载均衡器监视器组&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_oauth_client:&lt;/strong&gt; 管理 IAM OAuth 客户端&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_origin_cloud_region:&lt;/strong&gt; 管理源站云区域（v2 终结点）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_secrets_store:&lt;/strong&gt; 管理 Secrets Store 实例&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_secrets_store_secret:&lt;/strong&gt; 管理 Secrets Store 机密&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_share:&lt;/strong&gt; 管理资源共享&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_share_recipient:&lt;/strong&gt; 管理共享接收者&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_share_resource:&lt;/strong&gt; 管理共享资源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_device_deployment_groups:&lt;/strong&gt; 管理 Zero Trust 设备部署组&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_dlp_data_class:&lt;/strong&gt; 管理 DLP 数据类&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_dlp_data_tag:&lt;/strong&gt; 管理 DLP 数据标签&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_dlp_data_tag_category:&lt;/strong&gt; 管理 DLP 数据标签类别&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_dlp_sensitivity_group:&lt;/strong&gt; 管理 DLP 敏感性组&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_dlp_sensitivity_level:&lt;/strong&gt; 管理 DLP 敏感性级别&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_dlp_sensitivity_level_order:&lt;/strong&gt; 管理 DLP 敏感性级别排序&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_resource_library_application:&lt;/strong&gt; 管理 Zero Trust 资源库应用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_resource_library_category:&lt;/strong&gt; 管理 Zero Trust 资源库类别&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_zero_trust_tunnel_warp_connector_config:&lt;/strong&gt; 管理 WARP 连接器隧道配置&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;功能&quot;&gt;功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cache:&lt;/strong&gt; 为 smart_tiered_cache 添加创建 (POST) 方法&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cache:&lt;/strong&gt; 更新 OPCR 配置为 v2 终结点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dlp:&lt;/strong&gt; 将 classification Stainless 配置提升至主分支&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dlp:&lt;/strong&gt; 添加自定义提示词主题终结点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;email_security_block_sender:&lt;/strong&gt; 用于 v4 到 v5 迁移的状态升级器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;email_security_impersonation_registry:&lt;/strong&gt; 用于 v4 到 v5 迁移的状态升级器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;email_security_trusted_domains:&lt;/strong&gt; 用于 v4 到 v5 迁移的状态升级器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;snippets:&lt;/strong&gt; 为 snippet 和 snippet_rules 添加 Terraform &lt;code&gt;id_property&lt;/code&gt; 注释&lt;/li&gt;
&lt;li&gt;将 Go SDK 升级到 cloudflare-go v7&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;错误修复&quot;&gt;错误修复&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#错误修复&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;account_member:&lt;/strong&gt; 缺少从 v5.0–v5.15 的升级路径&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;authenticated_origin_pulls_settings:&lt;/strong&gt; 空指针异常 (nil pointer panic)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bot_management:&lt;/strong&gt; 恢复 model.go 中对 &lt;code&gt;content_bots_protection&lt;/code&gt; 的处理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dns_record:&lt;/strong&gt; 防止 FQDN 规范化吞掉名称缩短的更改&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;list:&lt;/strong&gt; 将空的嵌套对象设为 null，以防止 apply 后出现不一致的结果&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;load_balancer_pool:&lt;/strong&gt; 接受 schema_version=0 时早期 v5 对象形状的状态&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;load_balancer_pool:&lt;/strong&gt; 为 &lt;code&gt;load_shedding&lt;/code&gt; 属性添加 &lt;code&gt;UseStateForUnknown&lt;/code&gt; 以防止漂移&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;r2_custom_domain:&lt;/strong&gt; 恢复 resource.go 中的降级响应处理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;regional_hostname:&lt;/strong&gt; 将 cloudflare-go 导入从 v6 更新为 v7&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;secrets_store:&lt;/strong&gt; 修复模型/架构一致性并保护验收测试&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;spectrum_application:&lt;/strong&gt; 接受 schema_version=0 时早期 v5 对象形状的状态&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;worker:&lt;/strong&gt; 在多次读取之间保留 &lt;code&gt;observability.traces.propagation_policy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;worker:&lt;/strong&gt; 在可观测性默认值中添加 &lt;code&gt;propagation_policy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;worker_version:&lt;/strong&gt; 恢复手写的 D1 &lt;code&gt;database_id&lt;/code&gt; 处理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_custom_domain:&lt;/strong&gt; 状态迁移中缺少 &lt;code&gt;CertId&lt;/code&gt; field&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script:&lt;/strong&gt; 恢复被代码生成（codegen）剥离的注释 Read 规避方案&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_access_identity_provider:&lt;/strong&gt; 将 &lt;code&gt;read_only&lt;/code&gt; 从计算（computed）更改为可选（optional）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_access_identity_provider:&lt;/strong&gt; 将 &lt;code&gt;UseStateForUnknown&lt;/code&gt; 添加到仅限 SAML 的配置字段&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_access_identity_provider:&lt;/strong&gt; 在 scim_config 字段上使用 &lt;code&gt;UseNonNullStateForUnknown&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_access_policy:&lt;/strong&gt; 在迁移区域范围的 v4 状态时填充 &lt;code&gt;account_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_access_policy:&lt;/strong&gt; 迁移中缺少 &lt;code&gt;common_names&lt;/code&gt; 转换&lt;/li&gt;
&lt;li&gt;在迁移期间当配置具有 &lt;code&gt;attributes_flat&lt;/code&gt; 时，优雅地处理空指针解引用&lt;/li&gt;
&lt;li&gt;为所有新资源设置初始架构版本为 500&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;重构&quot;&gt;重构&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#重构&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;将 &lt;code&gt;MoveState&lt;/code&gt; 空值保护（nil guard）提取到共享助手程序中&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;了解更多信息&quot;&gt;了解更多信息&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#了解更多信息&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Terraform Provider&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-migration&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;版本 5 迁移指南&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/terraform/&quot;&gt;关于在 Cloudflare 中使用 Terraform 的文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;已稳定资源列表&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><product>Terraform</product><category>Terraform</category></item><item><title>Workers AI - Moonshot AI Kimi K2.7 Code 现已在 Workers AI 上可用</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-12-kimi-k2-7-code-workers-ai/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-12-kimi-k2-7-code-workers-ai/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/kimi-k2.7-code/&quot;&gt;&lt;code&gt;@cf/moonshotai/kimi-k2.7-code&lt;/code&gt;&lt;/a&gt; 现已在 Workers AI 上可用。Kimi K2.7 Code 是 Kimi K2 系列中针对代码进行了优化的变体，基于混合专家（Mixture-of-Experts）架构构建，总参数量为 1T，每个 token 的活跃参数量为 32B。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;改进的编码和智能体性能&quot;&gt;改进的编码和智能体性能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#改进的编码和智能体性能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;K2.7 Code 在编码和智能体基准测试中相比 K2.6 实现了显著提升：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;+21.8%&lt;/strong&gt;，在 Kimi Code Bench v2 上&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;+11.0%&lt;/strong&gt;，在 Program Bench 上&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;+31.5%&lt;/strong&gt;，在 MLS Bench Lite 上&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;推理效率&quot;&gt;推理效率&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#推理效率&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;K2.7 Code 与 K2.6 相比，使用的推理 token 减少了 30%，从而减少了“过度思考”并降低了重推理工作负载的推理成本。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;关键能力&quot;&gt;关键能力&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#关键能力&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;262.1k token 上下文窗口&lt;/strong&gt;，用于在长期运行的智能体任务中保留完整的对话历史记录、工具定义和代码库&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;长周期编码&lt;/strong&gt;，具有改进的指令遵循和更高的端到端编码任务成功率&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;视觉输入&lt;/strong&gt;，用于随文本一起处理图像&lt;/li&gt;
&lt;li&gt;可通过 &lt;code&gt;chat_template_kwargs.thinking&lt;/code&gt; 配置推理深度的&lt;strong&gt;思维模式&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多轮工具调用&lt;/strong&gt;，用于构建在多个对话轮次中调用工具的智能体&lt;/li&gt;
&lt;li&gt;支持 JSON schema 的&lt;strong&gt;结构化输出&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;与-kimi-k26-的区别&quot;&gt;与 Kimi K2.6 的区别&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#与-kimi-k26-的区别&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;如果您正在从 Kimi K2.6 迁移，请注意以下几点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;K2.7 Code 针对编码任务进行了优化，具备改进的基准测试性能和推理效率&lt;/li&gt;
&lt;li&gt;缓存的输入 token 定价为每百万（M）token 0.19 美元（而 K2.6 为 0.16 美元）&lt;/li&gt;
&lt;li&gt;API 使用方式完全相同 —— 无需更改参数&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;快速入门&quot;&gt;快速入门&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#快速入门&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/configuration/bindings/&quot;&gt;Workers AI 绑定（binding）&lt;/a&gt; (&lt;code&gt;env.AI.run()&lt;/code&gt;)、&lt;code&gt;/ai/run&lt;/code&gt; 处的 REST API，或者 &lt;code&gt;/v1/chat/completions&lt;/code&gt; 处的兼容 OpenAI 的端点来使用 Kimi K2.7 Code。您还可以在这些端点中搭配使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/kimi-k2.7-code/&quot;&gt;Kimi K2.7 Code 模型页面&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/platform/pricing/&quot;&gt;定价&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Browser Run - Browser Run /snapshot 端点新增 formats 参数</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-11-browser-run-snapshot-formats/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-11-browser-run-snapshot-formats/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/&quot;&gt;Browser Run&lt;/a&gt; 的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/snapshot/&quot;&gt;&lt;code&gt;/snapshot&lt;/code&gt; 端点&lt;/a&gt; 现在支持 &lt;code&gt;formats&lt;/code&gt; 参数，允许您在单次 API 调用中返回多种页面格式。此前，&lt;code&gt;/snapshot&lt;/code&gt; 仅返回 HTML 内容和截图。您现在还可以在同一响应中包含 Markdown 和无障碍树。&lt;/p&gt;
&lt;p&gt;这些格式对 AI Agent 工作流特别有用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown 提供了页面内容的高效 token 表示形式，LLM 可直接处理，无需解析 HTML 标记。&lt;/li&gt;
&lt;li&gt;无障碍树提供了页面元素的结构化表示，包括角色、标签和层级关系，帮助 LLM 理解页面结构并导航其内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下示例在一次调用中返回截图、Markdown 和无障碍树：&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;curl&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;https://api.cloudflare.com/client/v4/accounts/&amp;lt;accountId&amp;gt;/browser-rendering/snapshot&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Authorization: Bearer &amp;lt;apiToken&amp;gt;&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Content-Type: application/json&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;url&quot;: &quot;https://example.com/&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;formats&quot;: [&quot;screenshot&quot;, &quot;markdown&quot;, &quot;accessibilityTree&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  }&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript SDK&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;typescript&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot; data-nb-lang=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; Cloudflare &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;cloudflare&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; client&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Cloudflare&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	apiToken: process.env[&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;CLOUDFLARE_API_TOKEN&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; snapshot&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; client.browserRendering.snapshot.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	account_id: process.env[&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;CLOUDFLARE_ACCOUNT_ID&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	url: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;https://example.com/&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	formats: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;screenshot&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;markdown&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;accessibilityTree&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;console.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(snapshot.markdown);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;console.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(snapshot.accessibilityTree);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;Workers Bindings&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;typescript&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot; data-nb-lang=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;interface&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	BROWSER&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; BrowserRun&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Promise&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;BROWSER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;quickAction&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;snapshot&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			url: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;https://example.com/&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			formats: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;screenshot&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;markdown&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;accessibilityTree&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;satisfies&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ExportedHandler&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;您必须至少请求两种格式。如果只需要一种格式，请使用相应的单格式端点，例如 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/screenshot-endpoint/&quot;&gt;&lt;code&gt;/screenshot&lt;/code&gt;&lt;/a&gt; 或 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/markdown-endpoint/&quot;&gt;&lt;code&gt;/markdown&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/snapshot/&quot;&gt;&lt;code&gt;/snapshot&lt;/code&gt; 文档&lt;/a&gt; 以获取完整的支持值列表。&lt;/p&gt;</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><product>Browser Run</product><category>Browser Run</category></item><item><title>Data Loss Prevention - 为 AI 提示词保护定义自定义主题</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-11-custom-ai-prompt-topics/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-11-custom-ai-prompt-topics/</guid><description>&lt;p&gt;您现在可以为 AI 提示词保护定义自定义主题。预定义的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/data-loss-prevention/detection-entries/configure-detection-entries/#ai-prompt-topics&quot;&gt;AI 提示词主题&lt;/a&gt;涵盖了常见的生命周期和意图类别，例如 PII、源代码和越狱（jailbreak）尝试。自定义主题允许您检测未包含在预定义类别中的独特或专有概念。&lt;/p&gt;
&lt;p&gt;您用自然语言描述一个自定义主题，Cloudflare DLP 会根据上下文（而非特定关键字）检测提示词是否与该主题匹配。例如，描述机密合并讨论的主题会与对该交易进行释义的提示词相匹配，即使该提示词从未包含“合并”一词或涉及的公司名称。要检测诸如内部代号或产品标识符之类的字面值，请改用&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/data-loss-prevention/detection-entries/configure-detection-entries/#custom-wordlist-datasets&quot;&gt;自定义单词列表或模式条目&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;自定义主题与预定义的 AI 提示词主题运行相同的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/http-policies/#granular-controls&quot;&gt;应用程序精细控制&lt;/a&gt;路径。自定义主题适用于 ChatGPT、Google Gemini、Perplexity 和 Claude。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;创建自定义-ai-提示词主题&quot;&gt;创建自定义 AI 提示词主题&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#创建自定义-ai-提示词主题&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;a href=&quot;https://dash.cloudflare.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare 仪表板&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;中，转到 &lt;strong&gt;Zero Trust&lt;/strong&gt; &amp;gt; &lt;strong&gt;Data loss prevention（数据防泄露）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Detection entries（检测条目）&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;选择 &lt;strong&gt;AI prompt topics（AI 提示词主题）&lt;/strong&gt;，然后选择 &lt;strong&gt;Custom Prompt Topic（自定义提示词主题）&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;用自然语言描述主题。具体说明您想要检测的概念。例如，描述未发布的产品路线图细节或机密的客户合同条款。&lt;/li&gt;
&lt;li&gt;将此检测条目添加到现有的 DLP 配置文件中，或&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/data-loss-prevention/dlp-profiles/#build-a-custom-profile&quot;&gt;创建一个新的 DLP 配置文件&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;在 Gateway HTTP 策略中使用该配置文件，以记录或阻断与该主题相匹配的提示词。&lt;/li&gt;
&lt;/ol&gt;
&lt;aside role=&quot;note&quot; aria-label=&quot;说明&quot; class=&quot;aside-card flex items-start gap-3 rounded-lg px-4 py-3 my-4&quot; style=&quot;--_c: var(--nb-info); --_t: var(--nb-info-muted);&quot; data-astro-cid-znle5jil&gt;&lt;span class=&quot;flex h-[1.375em] shrink-0 items-center&quot; aria-hidden=&quot;true&quot; data-astro-cid-znle5jil&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[1em] w-[1em]&quot; data-astro-cid-znle5jil=&quot;true&quot; data-icon=&quot;ph:info&quot;&gt;&lt;symbol id=&quot;ai:ph:info&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m16-40a8 8 0 0 1-8 8a16 16 0 0 1-16-16v-40a8 8 0 0 1 0-16a16 16 0 0 1 16 16v40a8 8 0 0 1 8 8m-32-92a12 12 0 1 1 12 12a12 12 0 0 1-12-12&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:info&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;div class=&quot;flex min-w-0 flex-1 flex-col gap-0.5&quot; data-astro-cid-znle5jil&gt;&lt;p class=&quot;m-0 text-base leading-snug font-semibold&quot; data-astro-cid-znle5jil&gt;说明&lt;/p&gt;&lt;div class=&quot;aside-card-body text-sm leading-normal&quot; data-astro-cid-znle5jil&gt;&lt;p&gt;将描述写成一个要分类的概念，而不是关键字列表。例如，描述“内部财务预测和未发布的收入数字”，而不是列出特定的文档名称。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;有关更多详细信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/data-loss-prevention/detection-entries/configure-detection-entries/#ai-prompt-topics&quot;&gt;AI prompt topics&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category></item><item><title>Workers - 从仪表板和 GraphQL API 跟踪 Dynamic Workers 的使用情况</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-11-dynamic-workers-count/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-11-dynamic-workers-count/</guid><description>&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/dynamic-workers-count.BcGsgQ0m_ZBdT2X.webp&quot; alt=&quot;Workers 概览页面上的 Dynamic Workers 使用情况&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1476&quot; height=&quot;1102&quot;&gt;
&lt;p&gt;客户现在可以从 Cloudflare 仪表板的 Workers 概览页面查看在其计费周期内调用的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/dynamic-workers/&quot;&gt;Dynamic Workers&lt;/a&gt; 数量。&lt;/p&gt;
&lt;p&gt;此计数反映了 Cloudflare 在所选计费周期内将计费的 Dynamic Workers 数量。Dynamic Workers 的使用数据仅追溯到 2026 年 6 月 1 日。&lt;/p&gt;
&lt;p&gt;您还可以通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/analytics/graphql-api/&quot;&gt;GraphQL Analytics API&lt;/a&gt; 查询此计数，方法是使用 &lt;code&gt;workersInvocationsByOwnerAndScriptGroups&lt;/code&gt; 并选择 &lt;code&gt;distinctDynamicWorkerCount&lt;/code&gt;：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;graphql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;graphql&quot; data-nb-lang=&quot;graphql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; getDynamicWorkersCount&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	$accountTag&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	$filter&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;AccountWorkersInvocationsByOwnerAndScriptGroupsFilter_InputObject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;	viewer&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;		accounts&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: { &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;accountTag&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;$accountTag&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;			workersInvocationsByOwnerAndScriptGroups&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;limit&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;10000&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;$filter&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;				uniq&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;					distinctDynamicWorkerCount&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;使用变量来设置账户和计费周期日期范围：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;json&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot; data-nb-lang=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;accountTag&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;lt;ACCOUNT_ID&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;filter&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;date_geq&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;2026-06-01&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;date_leq&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;2026-06-30&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/dynamic-workers/pricing/&quot;&gt;Dynamic Workers 定价&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Search - 使用 Wrangler CLI 管理 AI Search 命名空间</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-ai-search-namespace-wrangler-commands/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-ai-search-namespace-wrangler-commands/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; 现在支持命名空间级别的 Wrangler 命令，这使得从您的终端、脚本和代理工作流程中管理&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/concepts/namespaces/&quot;&gt;命名空间（namespaces）&lt;/a&gt;变得更加容易。&lt;/p&gt;
&lt;p&gt;以下命令可用：&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search namespace list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列出 AI Search 命名空间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search namespace create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;创建新的 AI Search 命名空间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search namespace get&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;获取命名空间的详细信息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search namespace update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;更新命名空间描述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wrangler ai-search namespace delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;删除 AI Search 命名空间&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;直接从 CLI 为新应用程序或租户创建命名空间：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; ai-search&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; create&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; docs-production&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --description&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Production documentation search&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;通过分页列出命名空间，或按名称或描述进行过滤：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; ai-search&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; list&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --search&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; docs&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --page&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --per-page&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;将 &lt;code&gt;--json&lt;/code&gt; 与 &lt;code&gt;list&lt;/code&gt;、&lt;code&gt;create&lt;/code&gt;、&lt;code&gt;get&lt;/code&gt; 和 &lt;code&gt;update&lt;/code&gt; 结合使用，以返回自动化和 AI 代理可以直接解析的结构化输出。&lt;/p&gt;
&lt;p&gt;实例级别的命令现在也支持 &lt;code&gt;--namespace&lt;/code&gt; 标志，因此您可以从 CLI 与特定命名空间内的实例进行交互：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; ai-search&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; list&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; docs-production&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;有关完整的用法详情，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-search/wrangler-commands/&quot;&gt;AI Search Wrangler 命令文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>DNS - 账户级 DNS 记录配额</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-account-level-record-quota/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-account-level-record-quota/</guid><description>&lt;p&gt;Cloudflare 现在针对企业级（Enterprise）账户在账户级别执行 DNS 记录配额。这些账户不再限制每个区域的配额，而是对其所有区域的记录总数设立配额，允许您根据需要随意在各个区域之间分配记录，而无需考虑每个区域的计划。公共区域和内部区域分别计算，每个区域的默认配额为 1,000,000 条记录。&lt;/p&gt;
&lt;p&gt;没有账户级配额的账户不受影响：现有的每个区域配额与以前完全相同。&lt;/p&gt;
&lt;p&gt;有关更多详细信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/dns/manage-dns-records/#dns-records-quota&quot;&gt;DNS records quota&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>Flagship - Flagship API 参考现已上线</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-api-reference/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-api-reference/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/flagship/&quot;&gt;Flagship API 参考&lt;/a&gt;&lt;/strong&gt; 现已上线。您可以使用 Cloudflare API 创建和更新应用，以及在不使用仪表板的情况下创建、更新、删除和列出功能标志。&lt;/p&gt;
&lt;p&gt;例如，使用 API 创建一个新的布尔标志：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/flagship/apps/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/flags&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;key&quot;: &quot;new-checkout&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;enabled&quot;: true,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;default_variation&quot;: &quot;off&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;variations&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;off&quot;: false,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;on&quot;: true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;rules&quot;: []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  }&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;要创建 API token，请前往 Cloudflare 仪表板中的&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/api-tokens&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;账户 API Tokens&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 并搜索 Flagship。&lt;/p&gt;
&lt;p&gt;API 参考包含 Flagship 应用、标志、更新日志条目和标志评估的端点。Agent 还可以使用 &lt;a href=&quot;https://github.com/cloudflare/skills/tree/main/skills/cloudflare/references/flagship&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare skill 中的 Flagship 参考&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 创建和管理 Flagship 资源。&lt;/p&gt;
&lt;p&gt;请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/flagship/&quot;&gt;Flagship 文档&lt;/a&gt; 以了解有关从应用程序评估功能标志的更多信息。&lt;/p&gt;</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><product>Flagship</product><category>Flagship</category></item><item><title>Cloudflare Images - 使用 Images 绑定管理托管的图像</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-hosted-images-binding/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-10-hosted-images-binding/</guid><description>&lt;p&gt;使用 Images 绑定（binding）可以直接从您的 Worker 上传、列出、检索、更新和删除存储在 Images 中的图像，而无需管理 API 令牌（tokens）或发送 HTTP 请求。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;env.IMAGES.hosted&lt;/code&gt; 命名空间支持以下存储和管理操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/storage/binding/#uploadimage-options&quot;&gt;&lt;code&gt;.upload(image, options)&lt;/code&gt;&lt;/a&gt; — 向您的账户上传一个新图像。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/storage/binding/#listoptions&quot;&gt;&lt;code&gt;.list(options)&lt;/code&gt;&lt;/a&gt; — 通过分页列出图像。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/storage/binding/#imageimageiddetails&quot;&gt;&lt;code&gt;.image(imageId).details()&lt;/code&gt;&lt;/a&gt; — 获取图像元数据。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/storage/binding/#imageimageidbytes&quot;&gt;&lt;code&gt;.image(imageId).bytes()&lt;/code&gt;&lt;/a&gt; — 流式传输原始图像字节。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/storage/binding/#imageimageidupdateoptions&quot;&gt;&lt;code&gt;.image(imageId).update(options)&lt;/code&gt;&lt;/a&gt; — 更新元数据或访问控制。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/storage/binding/#imageimageiddelete&quot;&gt;&lt;code&gt;.image(imageId).delete()&lt;/code&gt;&lt;/a&gt; — 删除图像。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，您可以从请求主体中上传图像并返回其元数据：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; image&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;IMAGES&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.hosted.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;upload&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(request.body, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	filename: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;upload.jpg&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	metadata: { source: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;worker&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; Response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(image);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;或者检索并提供托管图像的原始字节：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; bytes&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;IMAGES&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.hosted.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;IMAGE_ID&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;bytes&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(bytes);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/storage/binding/&quot;&gt;Images 绑定&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare Images</product><category>Cloudflare Images</category></item><item><title>Security Center - 针对 Brand Protection 的自动 Cease and Desist（停止并终止）模板</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-brand-protection-cease-and-desist-letters/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-brand-protection-cease-and-desist-letters/</guid><description>&lt;p&gt;&lt;strong&gt;摘要（TL;DR）：&lt;/strong&gt; Brand Protection 现在具有 &lt;strong&gt;自动 Cease &amp;amp; Desist（C&amp;amp;D）&lt;/strong&gt; 工作流。当您发现托管在 Cloudflare 之外的侵权域名时，您可以在数秒内立即生成、审查并下载带有自定义品牌标识且预先填写的法律通知。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;为什么这很重要&quot;&gt;为什么这很重要&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#为什么这很重要&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;此更新引入了从纯检测到可行性执法的重大转变，消除了您的 Trust &amp;amp; Safety 和法务团队的手动负担：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;即时 WHOIS 和收件人查询&lt;/strong&gt;：我们会在后台自动抓取注册商数据和 WHOIS 联系信息（例如注册人或注册商滥用投诉邮箱），精确指出您的通知需要发送到哪里&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;智能模板自动化&lt;/strong&gt;：我们使用基本元数据预先填写您的自定义品牌模板，包括侵权域名、注册商名称和发现日期。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;量身定制的执法语气&lt;/strong&gt;：根据基础设施匹配的严重程度，从三种默认布局策略中进行选择：
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Exact Match&lt;/em&gt;（精确匹配）：针对完全相同的商标侵权行为提出正式要求&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Similar Match&lt;/em&gt;（相似匹配）：针对域名仿冒（单字符距离匹配）进行优化的标准通知&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Friendly Tone&lt;/em&gt;（友好语气）：针对潜在的无意或意外侵权行为的友好初步沟通&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;完全的编辑控制&lt;/strong&gt;：在创建最终的 PDF 之前，实时审查屏幕允许您微调消息传递、修改占位符，并确保您的文本与内部法律标准完美契合&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;工作原理&quot;&gt;工作原理&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#工作原理&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;在仪表板内审查恶意域名匹配时，您的执法路径会根据攻击者所在的位置而有所不同：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;在 Cloudflare 网络上&lt;/strong&gt;：如果该域名使用 Cloudflare 的网络或注册商，只需单击一下即可触发我们现有的集成滥用报告流程。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;托管在其他地方&lt;/strong&gt;：如果该域名托管在外部提供商上，单击 &lt;strong&gt;Generate C&amp;amp;D Letter&lt;/strong&gt; 选项启动新的文档生成器，选择您的模板，验证自动填充的收件人数据，然后下载最终生成的 PDF。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;您可以通过前往 &lt;strong&gt;Cloudflare 仪表板 &amp;gt; Application Security &amp;gt; Brand Protection&lt;/strong&gt; 并选择您检测到的 Brand Protection 匹配项来管理模板并执行匹配。
有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/security-center/brand-protection/&quot;&gt;Brand Protection 文档&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：Cloudflare 并不代表您，也无法为您提供法律建议。只有您自己能决定您的权利是否受到侵犯、警告信是否合适以及该信件应包含的内容。&lt;/p&gt;
&lt;/blockquote&gt;</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Sandbox SDK - 已弃用 Sandbox SDK 功能</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-09-deprecating-sandbox-sdk-features/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-09-deprecating-sandbox-sdk-features/</guid><description>&lt;p&gt;今天我们宣布弃用 Sandbox SDK 的若干功能。自首次发布以来，SDK 已大幅成长和成熟。随着 Agent 工作流的发展，我们已发布了许多新功能和实验性内容，让开发者能够轻松地将安全的隔离代码执行集成到其工作流中。&lt;/p&gt;
&lt;p&gt;我们希望 SDK 在快速迭代代码库的同时，继续为 Agent 工作流提供稳定的基础。这些已弃用的功能要么已被更新的功能所取代，要么采用率较低。它们将保留在代码库中直至 2026 年 7 月 9 日，之后将不再出现在未来的 Sandbox SDK 版本中。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;http-和-websocket-传输&quot;&gt;HTTP 和 WebSocket 传输&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#http-和-websocket-传输&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;2026 年 4 月，我们发布了新的 RPC 传输并弃用了 WebSocket 传输。此设置控制沙箱容器与 Workers 生态系统的通信方式。RPC 传输消除了 HTTP 和 WebSocket 传输的两种限制。自 2026 年 6 月 9 日起，它是推荐的默认选项。HTTP 和 WebSocket 传输将不再出现在 2026 年 7 月 9 日后发布的 Sandbox SDK 版本中。&lt;/p&gt;
&lt;p&gt;如需在 2026 年 7 月 9 日之前迁移，请将 &lt;code&gt;SANDBOX_TRANSPORT&lt;/code&gt; 变量更新为 &lt;code&gt;rpc&lt;/code&gt;，或在调用 &lt;code&gt;getSandbox()&lt;/code&gt; 时设置 &lt;code&gt;transport&lt;/code&gt; 选项。更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/configuration/transport/&quot;&gt;传输配置文档&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;desktop&quot;&gt;Desktop&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#desktop&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Desktop 功能作为 Sandbox SDK 功能演示而推出——可在沙箱中控制完整的浏览器环境。随着 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/&quot;&gt;Cloudflare Browser Run&lt;/a&gt; 的推出，该功能使用率极低。我们已在 &lt;code&gt;0.10.2&lt;/code&gt; 中将其移除。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;公开端口&quot;&gt;公开端口&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#公开端口&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;我们最近在 Sandbox SDK 中发布了对 Cloudflare Tunnel 的支持。它为将沙箱中运行的服务公开到公共互联网提供了强大的 API，解决了许多人在本地开发和部署到 &lt;code&gt;workers.dev&lt;/code&gt; 域名时遇到的问题。如需从 &lt;code&gt;exposePort()&lt;/code&gt; 迁移到隧道，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/api/tunnels/&quot;&gt;隧道 API 文档&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/guides/expose-services/&quot;&gt;公开服务指南&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;默认会话&quot;&gt;默认会话&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#默认会话&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;默认情况下，Sandbox SDK 中的 &lt;code&gt;exec()&lt;/code&gt; 方法在所有调用之间维护一个默认会话，因此某次调用中的 &lt;code&gt;cd&lt;/code&gt; 会在下一次调用中生效。这种便利性对手动编写 &lt;code&gt;exec&lt;/code&gt; 语句的开发者有帮助，但会让 Agent 感到困惑，并导致难以追踪的 Bug。自 &lt;code&gt;0.10.3&lt;/code&gt; 起，我们在 &lt;code&gt;getSandbox()&lt;/code&gt; 接口上引入了 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/configuration/sandbox-options/&quot;&gt;&lt;code&gt;enableDefaultSession&lt;/code&gt;&lt;/a&gt; 标志来关闭此功能。默认会话这一概念——以及该标志——将在后续版本中移除。&lt;/p&gt;
&lt;p&gt;我们建议今天就将 &lt;code&gt;enableDefaultSession: false&lt;/code&gt; 设置为当前值，并在需要之前行为时使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/api/sessions/&quot;&gt;&lt;code&gt;sandbox.createSession()&lt;/code&gt; API&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;其他变更&quot;&gt;其他变更&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#其他变更&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;我们还在整合所有缓冲数据的 API，以默认支持流式传输。这包括 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/api/files/&quot;&gt;&lt;code&gt;readFile&lt;/code&gt;、&lt;code&gt;writeFile&lt;/code&gt;&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/api/commands/&quot;&gt;&lt;code&gt;exec&lt;/code&gt;&lt;/a&gt;。流式等效方法将被移除。&lt;/p&gt;
&lt;p&gt;我们正在探索将非核心功能（如&lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/guides/code-execution/&quot;&gt;代码解释器&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/api/terminal/&quot;&gt;终端&lt;/a&gt;和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/guides/git-workflows/&quot;&gt;git API&lt;/a&gt;）移入辅助工具。这些功能将保留现有 API，因此迁移应该很简单。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;后续步骤&quot;&gt;后续步骤&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#后续步骤&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;如果您使用了上述任何功能，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/guides/2026-deprecation/&quot;&gt;2026 年弃用迁移指南&lt;/a&gt;。我们还提供了一个 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/guides/2026-deprecation/SKILL.md&quot;&gt;Agent skill&lt;/a&gt; 来协助迁移。&lt;/p&gt;
&lt;p&gt;如有任何问题，请在 &lt;a href=&quot;https://discord.gg/cloudflaredev&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare 开发者 Discord&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 中提问。&lt;/p&gt;</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><product>Sandbox SDK</product><category>Sandbox SDK</category></item><item><title>WAF - WAF 发布 - 2026-06-09</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-09-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-09-waf-release/</guid><description>
&lt;p&gt;此版本引入了针对使用 PostgreSQL 的 Drupal 安装中关键 SQL 注入漏洞（CVE-2026-9082）的新检测，以及针对 Mirasvit Cache Warmer 扩展中不安全反序列化缺陷（CVE-2026-45247）的针对性防护。此外，此版本还包含对 Axios 中原型污染向量（CVE-2026-40175）的覆盖，以及一条旨在识别和阻断利用混淆布尔逻辑的复杂 SQL 注入 (SQLi) 绕过尝试的新通用规则。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2026-9082: 配置了 PostgreSQL 后端的 Drupal 网站受到数据库抽象漏洞的影响。远程、未经身份验证的攻击者可以通过精心设计的输入利用该漏洞注入恶意 SQL 命令并访问或操作后端数据。&lt;/li&gt;
&lt;li&gt;CVE-2026-45247: Magento 和 Adobe Commerce 的 Mirasvit Cache Warmer 扩展中存在 PHP 对象注入漏洞。该漏洞源于对不受信任的用户进行的不安全反序列化输入，使未经身份验证的攻击者能够在托管服务器上执行任意代码。&lt;/li&gt;
&lt;li&gt;CVE-2026-40175: Axios HTTP 客户端库中存在原型污染漏洞。攻击者可以利用此漏洞向全局 JavaScript 对象原型中注入恶意属性，从而可能导致应用程序崩溃（拒绝服务）或根据应用程序结构执行未经授权的代码。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;影响&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;成功利用这些漏洞可能允许未经身份验证的攻击者执行任意代码、操作数据库内容或引发应用程序崩溃，从而导致严重的操作中断或服务器完全受损。这些新部署的签名在边缘拦截了这些先进的恶意负载，然后它们才能与脆弱的软件配置进行交互。&lt;/p&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;b4f88cb767874def810edd0b387cf935&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...387cf935&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Axios - Prototype Pollution - CVE:CVE-2026-40175&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;098997bb8b5f48abb4039bd6417eb9e0&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...417eb9e0&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Drupal - PostgreSQL SQLi - CVE:CVE-2026-9082 - Body&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;8a7650b99ec04a91a19b8295fd3857fd&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...fd3857fd&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Drupal - PostgreSQL SQLi - CVE:CVE-2026-9082 - URI&lt;/td&gt;&lt;td&gt;记录&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;525c0871787840e6a6193f6caee241d2&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...aee241d2&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;SQLi - Obfuscated Boolean - Body&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;1ec4aeaf7900463397b82b35d8620070&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...d8620070&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;SQLi - Obfuscated Boolean - Headers&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;fb74766654c44ff2a5204dc4e0be4d47&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...e0be4d47&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Mirasvit Cache Warmer - PHP Object Injection - CVE:CVE-2026-45247&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Email Service - 身份验证的 SMTP 提交功能现已在 beta 阶段可用</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-smtp-submission/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-smtp-submission/</guid><description>&lt;p&gt;您现在可以使用 &lt;code&gt;smtp.mx.cloudflare.net:465&lt;/code&gt; 上的身份验证 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/api/send-emails/smtp/&quot;&gt;SMTP 提交&lt;/a&gt;，通过 &lt;strong&gt;Cloudflare Email Service&lt;/strong&gt; 发送电子邮件。SMTP 与 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/api/send-emails/rest-api/&quot;&gt;REST API&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/api/send-emails/workers-api/&quot;&gt;Workers 绑定&lt;/a&gt; 一起构成了发送交易性电子邮件的第三种方式——这对于已经采用 SMTP 协议的现有应用程序以及语言原生 SMTP 库（如 Nodemailer、&lt;code&gt;smtplib&lt;/code&gt;、PHPMailer、JavaMail）非常有用。&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;设置&lt;/th&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;主机 (Host)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;smtp.mx.cloudflare.net&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;端口 (Port)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;465&lt;/code&gt; (隐式 TLS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AUTH&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PLAIN&lt;/code&gt; 或 &lt;code&gt;LOGIN&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;用户名 (Username)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;api_token&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密码 (Password)&lt;/td&gt;
&lt;td&gt;具有 &lt;strong&gt;Email Sending: Edit&lt;/strong&gt; 权限的 Cloudflare API 令牌（账户所有或用户所有）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;提交将进入与 REST API 和 Workers 绑定相同的递送管道：相同的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/platform/limits/&quot;&gt;限制&lt;/a&gt;、自动 DKIM 和 ARC 签名，以及共享的仪表板日志。&lt;/p&gt;
&lt;p&gt;使用单条命令发送您的第一封电子邮件：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --ssl-reqd&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --url&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;smtps://smtp.mx.cloudflare.com:465&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --user&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;api_token:&amp;lt;API_TOKEN&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --mail-from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;welcome@yourdomain.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --mail-rcpt&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;user@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --upload-file&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; mail.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;有关身份验证详细信息、响应代码和特定语言的示例，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/api/send-emails/smtp/&quot;&gt;SMTP 参考&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>R2 SQL - R2 SQL 现在支持 UNION、INTERSECT、EXCEPT 和 SELECT DISTINCT</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-union-intersect-except-select-distinct/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-union-intersect-except-select-distinct/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt; 现在支持集合操作（&lt;code&gt;UNION&lt;/code&gt;、&lt;code&gt;INTERSECT&lt;/code&gt;、&lt;code&gt;EXCEPT&lt;/code&gt;）和 &lt;code&gt;SELECT DISTINCT&lt;/code&gt;，从而扩展了您可直接对 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 中 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 表运行的分析查询范围。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;集合操作&quot;&gt;集合操作&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#集合操作&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;组合多个 &lt;code&gt;SELECT&lt;/code&gt; 语句的结果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UNION&lt;/code&gt;&lt;/strong&gt; — 返回两个查询的所有行，并移除重复项。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UNION ALL&lt;/code&gt;&lt;/strong&gt; — 返回两个查询的所有行，保留重复项。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;INTERSECT&lt;/code&gt;&lt;/strong&gt; — 仅返回在两个查询中都出现的行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EXCEPT&lt;/code&gt;&lt;/strong&gt; — 返回存在于第一个查询中但不存在于第二个查询中的行。&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;-- Find zones that had either firewall blocks OR high-risk requests&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;firewall_events&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; action&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;block&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;UNION&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;http_requests&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; risk_score &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;-- Find zones with both firewall blocks AND high traffic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;firewall_events&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; action&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;block&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;INTERSECT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;http_requests&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;HAVING&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;-- Find enterprise zones that have not been compacted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zones&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; plan &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;enterprise&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;EXCEPT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;compaction_history&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;select-distinct&quot;&gt;SELECT DISTINCT&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#select-distinct&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;从查询结果中消除重复行：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT DISTINCT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; region, department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;sales_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; total_amount &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 1000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; region, department&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;对于可以接受近似结果的大型数据集，&lt;code&gt;approx_distinct()&lt;/code&gt; 仍是计算唯一值数量的更快替代方法。&lt;/p&gt;
&lt;p&gt;有关完整语法参考，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/sql-reference/&quot;&gt;SQL 参考&lt;/a&gt;。有关性能指南，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/reference/limitations-best-practices/&quot;&gt;限制与最佳实践&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><product>R2 SQL</product><category>R2 SQL</category></item><item><title>Realtime - RealtimeKit 会后转录现已正式发布</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-realtimekit-post-meeting-transcription-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-realtimekit-post-meeting-transcription-ga/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/&quot;&gt;RealtimeKit&lt;/a&gt; 让您可以在 Cloudflare 的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/calls-vs-sfus/&quot;&gt;全球 WebRTC 基础设施&lt;/a&gt;上构建人们通过实时音视频进行会议的产品，例如医疗健康科技、教育科技、监考以及其他实时平台。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/ai/transcription/#post-meeting-transcription&quot;&gt;会后转录&lt;/a&gt;现已正式发布，已完成的 RealtimeKit 会议可在结束后自动生成完整的转录文件。这些转录文件还可为&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/ai/summary/&quot;&gt;AI 生成摘要&lt;/a&gt;提供支持，用于会议记录、审查工作流以及转录文件可用后的跟进任务。&lt;/p&gt;
&lt;p&gt;会后转录是由 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt; 使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/whisper-large-v3-turbo/&quot;&gt;Whisper Large v3 Turbo&lt;/a&gt; 驱动的托管服务。RealtimeKit 处理转录过程，并可通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/webhooks/&quot;&gt;webhook&lt;/a&gt; 或 REST API 返回转录和摘要文件，因此您无需运行自己的转录基础设施。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;生成转录和摘要&quot;&gt;生成转录和摘要&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#生成转录和摘要&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;要在会议结束后生成转录，请在&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/realtime_kit/subresources/meetings/methods/create/&quot;&gt;创建会议&lt;/a&gt;时设置 &lt;code&gt;transcribe_on_end: true&lt;/code&gt;。要在转录可用后也自动生成 AI 摘要，请设置 &lt;code&gt;summarize_on_end: true&lt;/code&gt;：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/meetings&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;title&quot;: &quot;Weekly product review&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;transcribe_on_end&quot;: true,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;summarize_on_end&quot;: true,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;ai_config&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;transcription&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        &quot;language&quot;: &quot;en&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;summarization&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        &quot;word_limit&quot;: 500,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        &quot;text_format&quot;: &quot;markdown&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        &quot;summary_type&quot;: &quot;team_meeting&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  }&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;获取结果&quot;&gt;获取结果&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#获取结果&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;当 RealtimeKit 完成会议处理后，会为转录文件创建下载 URL，如果设置了 &lt;code&gt;summarize_on_end&lt;/code&gt;，则还会为摘要创建下载 URL。您可以通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/webhooks/&quot;&gt;webhook&lt;/a&gt; 自动接收这些 URL，或通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/ai/summary/#rest-api&quot;&gt;REST API&lt;/a&gt; 稍后为特定会话获取。&lt;/p&gt;
&lt;p&gt;要在结果准备好后立即接收，请配置 &lt;code&gt;meeting.transcript&lt;/code&gt; 和 &lt;code&gt;meeting.summary&lt;/code&gt; webhook 事件：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/webhooks&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;name&quot;: &quot;AI results webhook&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;url&quot;: &quot;https://example.com/webhook&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;events&quot;: [&quot;meeting.transcript&quot;, &quot;meeting.summary&quot;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;enabled&quot;: true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  }&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;要稍后获取结果，请调用相应会话的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/realtime_kit/subresources/sessions/methods/get_session_transcripts/&quot;&gt;转录&lt;/a&gt;或&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/realtime_kit/subresources/sessions/methods/get_session_summary/&quot;&gt;摘要&lt;/a&gt;端点：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; GET&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/sessions/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$SESSION_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/transcript&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; GET&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/sessions/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$SESSION_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/summary&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;仅当未设置 &lt;code&gt;summarize_on_end&lt;/code&gt; 且您希望在转录可用后手动生成摘要时，才使用&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/realtime_kit/subresources/sessions/methods/generate_summary_of_transcripts/&quot;&gt;为会话转录生成摘要&lt;/a&gt; API：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/sessions/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$SESSION_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/summary&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;会后转录支持 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/ai/transcription/#output-formats&quot;&gt;CSV、JSON、SRT 和 VTT 转录输出格式&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/ai/transcription/#post-meeting-supported-languages&quot;&gt;自动语言检测和 Whisper 语言代码&lt;/a&gt;。RealtimeKit 还支持使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/nova-3/&quot;&gt;Deepgram Nova-3&lt;/a&gt; 进行&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/ai/transcription/#real-time-transcription&quot;&gt;实时转录&lt;/a&gt;，用于实时字幕、会议内无障碍功能和实时记录。&lt;/p&gt;
&lt;p&gt;在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/ai/transcription/&quot;&gt;RealtimeKit 转录文档&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/ai/summary/&quot;&gt;摘要文档&lt;/a&gt;中了解更多信息。&lt;/p&gt;</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><product>Realtime</product><category>Realtime</category></item><item><title>Security Center - 直接从 Threat Events 保存的视图创建 WAF 规则</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-create-waf-rules-from-threat-events/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-create-waf-rules-from-threat-events/</guid><description>&lt;p&gt;Cloudforce One 用户现在可以将 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/security-center/cloudforce-one/#analyze-threat-events&quot;&gt;Threat Events 指标&lt;/a&gt;转化为主动防御。通过此更新，用户可以立即生成一个 WAF 规则，该规则与他们的任何 &lt;strong&gt;Saved Views（已保存视图）&lt;/strong&gt; 返回的 IP 地址动态列表相匹配。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;为什么这很重要&quot;&gt;为什么这很重要&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#为什么这很重要&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;威胁情报在能立即转化为行动时最有效。以前，阻止威胁行为者需要从威胁事件中手动提取指标并将其复制到您的防火墙规则中。
这一新的集成弥合了威胁发现与威胁缓解之间的差距：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当您识别出活动的威胁模式时 —— 例如针对特定行业的持续活动，或者使用已知的指标类型 —— 您只需单击一下即可从调查转向缓解。&lt;/li&gt;
&lt;li&gt;这种功能允许您利用在 Threat Events 生态系统内已经定义并保存的特定过滤逻辑，而不是编写复杂的静态 IP 规则。&lt;/li&gt;
&lt;li&gt;自动从您的威胁视图中生成 WAF 规则表达式可消除手动复制错误，确保立即阻止正确的恶意基础设施。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;如何使用&quot;&gt;如何使用&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#如何使用&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;您可以通过仪表板 UI 以及通过 API / Terraform 来实施这些规则。&lt;/p&gt;
&lt;p&gt;前往 &lt;strong&gt;Cloudflare 仪表板&lt;/strong&gt; &amp;gt; &lt;strong&gt;Application Security（应用安全）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Threat Intelligence（威胁情报）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Manage Views（管理视图）&lt;/strong&gt;，选择您所需的视图，然后选择 &lt;strong&gt;Create WAF Rule（创建 WAF 规则）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这将使用匹配的威胁事件 IP 指标自动预先填充 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/firewall/cf-dashboard/create-edit-delete-rules/&quot;&gt;WAF 规则生成器&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;您还可以通过结合使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/firewall/api/cf-firewall-rules/&quot;&gt;&lt;strong&gt;WAF Rule Builder API&lt;/strong&gt;&lt;/a&gt; 以及您的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/firewall/api/cf-firewall-rules/&quot;&gt;Threat Events saved views 终点&lt;/a&gt;来自动执行此工作流程。&lt;/p&gt;</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Security Center - 在 Threat Events 中推出 Threat Actor Profiles（威胁行为者档案）</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-threat-actor-profiles/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-08-threat-actor-profiles/</guid><description>&lt;p&gt;&lt;strong&gt;摘要（TL;DR）：&lt;/strong&gt; 我们直接在 Threat Events 仪表板中推出了 &lt;strong&gt;Threat Actor Profiles（威胁行为者档案）&lt;/strong&gt;。您现在可以立即从通用的警报或被阻止的事件，转向揭示威胁事件背后“是谁、为什么以及如何进行”的档案。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;为什么这很重要&quot;&gt;为什么这很重要&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#为什么这很重要&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;安全团队经常面临可见性差距。当一次攻击被阻止时，很难知道它是一个随机的自动化机器人，还是专门针对您行业的复杂高级持续性威胁（APT）活动。要查明原因，通常意味着需要离开您的安全仪表板，去搜寻外部的 OSINT 源或静态且过时的威胁报告。&lt;/p&gt;
&lt;p&gt;Threat Actor Profiles 通过直接在您的工作流中共享 Cloudforce One 的深度对手研究来解决此问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cloudflare 实时查看全球大约 20% 的网络流量。这意味着在活动恶意基础设施接触到我们全球边缘的瞬间，行为者档案就会显示该基础设施。&lt;/li&gt;
&lt;li&gt;每个档案都提供清晰的战略和战术模块，包括备用别名、来源追踪、历史威胁事件卷以及详细说明对手技术方法的 MITRE ATT&amp;amp;CK 映射。&lt;/li&gt;
&lt;li&gt;您可以搜索专属的威胁行为者目录，或在任何威胁事件内点击行为者的名称，以查看该特定威胁行为者的所有详细信息和相关事件。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;如何使用&quot;&gt;如何使用&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#如何使用&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;对手追踪现在可在 Cloudflare 仪表板中使用，并已准备好纳入您的日常调查工作流程中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击 Threat Events 表格中的 &lt;strong&gt;Threat Actor（威胁行为者）&lt;/strong&gt; 名称以打开其完整的身份档案，并查看其别名和攻击统计数据。&lt;/li&gt;
&lt;li&gt;导航至 &lt;strong&gt;Cloudflare 仪表板&lt;/strong&gt; &amp;gt; &lt;strong&gt;Application Security（应用安全）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Threat Intelligence（威胁情报）&lt;/strong&gt; 以探索全新的 &lt;strong&gt;Threat Actors（威胁行为者）&lt;/strong&gt; 标签页。在这里，您可以浏览由 Cloudforce One 追踪的所有既定实体的卡片式目录。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/security-center/cloudforce-one/#identify-the-adversary&quot;&gt;Cloudforce One 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Workflows - Workflows 现已支持回滚</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-saga-rollbacks/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-saga-rollbacks/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/&quot;&gt;Workflows&lt;/a&gt; 现已支持 saga 风格的回滚，允许您向每个 &lt;code&gt;step.do()&lt;/code&gt; 添加补偿逻辑，以应对下游故障。如果实例失败，回滚处理程序将按照 &lt;code&gt;step-start&lt;/code&gt; 顺序的逆序执行。&lt;/p&gt;
&lt;p&gt;这对于涉及外部系统的多步骤操作非常有用，例如库存预留、付款授权、工单创建或基础设施配置。与其将所有清理逻辑编写在顶级 &lt;code&gt;catch&lt;/code&gt; 中，不如将每个补偿操作放在其所撤销的步骤旁边。&lt;/p&gt;
&lt;p&gt;回滚处理程序支持自己的重试和超时配置，Workflows 现在在实例状态响应中公开回滚结果。Workflows 分析还会发送回滚生命周期事件，使在调试生产工作流时更容易区分正向执行失败和回滚失败。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;	&quot;provision resource&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; () &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; resource&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; provisionResource&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { resourceId: resource.id };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;		rollback&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; ({ &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			const&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;resourceId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; output;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; deleteResource&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(resourceId);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		rollbackConfig: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			retries: { limit: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, delay: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;15 seconds&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, backoff: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;linear&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			timeout: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;2 minutes&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;	&quot;provision resource&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; () &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; resource&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; provisionResource&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { resourceId: resource.id };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;		rollback&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; ({ &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			const&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;resourceId&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; output &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;as&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;resourceId&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; deleteResource&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(resourceId);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		rollbackConfig: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			retries: { limit: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, delay: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;15 seconds&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, backoff: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;linear&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			timeout: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;2 minutes&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/build/workers-api/#rollback-options&quot;&gt;回滚选项&lt;/a&gt;了解更多信息。&lt;/p&gt;</description><pubDate>Fri, 05 Jun 2026 15:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category></item><item><title>AI Gateway - 使用支出限制控制 AI 成本</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-spend-limits/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-spend-limits/</guid><description>&lt;p&gt;AI Gateway 现在支持支出限制（spend limits）——基于成本的预算，可追踪累计美元支出，并在超出预算时拦截请求。与限制请求次数的速率限制不同，支出限制是基于 Token 使用量和模型定价来追踪实际成本。&lt;/p&gt;
&lt;p&gt;您可以按模型、提供商或自定义元数据维度来限定限制范围。例如，为每个用户分配每日 200 美元的预算，将网关总支出限制在每日 10,000 美元以内，或者限制每个用户对特定模型的每日支出上限为 50 美元。每条规则都使用可配置的时间窗口，可采用固定或滑动执行策略。&lt;/p&gt;
&lt;p&gt;支出限制适用于具有已知定价模型的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-gateway/features/unified-billing/&quot;&gt;统一计费（Unified Billing）&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-gateway/configuration/bring-your-own-keys/&quot;&gt;BYOK（自带密钥）&lt;/a&gt; 请求。&lt;/p&gt;
&lt;p&gt;欲了解更多细节，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-gateway/features/spend-limits/&quot;&gt;支出限制文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Radar - Cloudflare Radar 针对较长时间范围提供更细粒度图表</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-radar-traffic-chart-granularity/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-radar-traffic-chart-granularity/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; 现在为较长时间范围提供更细粒度的流量图表。此前，在 HTTP 和 NetFlows 图表上选择 1-3 个月视图时，默认采用每周聚合，粒度过粗，难以呈现有意义的趋势。超过 3 个月的视图默认采用每月聚合，6 个月范围内最少只返回 7 个数据点。&lt;/p&gt;
&lt;p&gt;新的默认值为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1-3 个月&lt;/strong&gt;：每日粒度（数据点增加 7 倍）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;超过 3 个月&lt;/strong&gt;（HTTP 和 NetFlows）：每周粒度（数据点增加 4 倍）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，12 周流量视图之前显示每周数据：&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/traffic-granularity-12w-before.OlJmS6Ts_1UjtFK.webp&quot; alt=&quot;12 周视图使用每周粒度的流量趋势图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;878&quot;&gt;
&lt;p&gt;现在同一视图显示每日数据：&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/traffic-granularity-12w-after.DL8mxwQ3_ZMfTlA.webp&quot; alt=&quot;12 周视图使用每日粒度的流量趋势图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;878&quot;&gt;
&lt;p&gt;同样，此前 1 年 HTTP 流量视图仅显示 12 个月度数据点，现在可提供 52 个每周数据点。&lt;/p&gt;
&lt;p&gt;访问 &lt;a href=&quot;https://radar.cloudflare.com/?dateRange=12w#traffic-trends&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Radar&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 探索新的细粒度视图。&lt;/p&gt;</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Gateway, Cloudflare Mesh, Workers VPC - 使用 Gateway 策略过滤 Workers 的公共互联网流量</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-gateway-egress/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-05-gateway-egress/</guid><description>
&lt;p&gt;使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-vpc/configuration/vpc-networks/&quot;&gt;VPC 网络（VPC Network）&lt;/a&gt; 绑定（binding）与 &lt;code&gt;network_id: &quot;cf1:network&quot;&lt;/code&gt; 的 Workers 现在可以通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot;&gt;Cloudflare Gateway&lt;/a&gt; 出口到公共互联网目标。这意味着您现有的 Zero Trust 流量策略 —— DNS、HTTP、网络和出口（egress）—— 将延伸到源自您的 Workers 的流量，就像今天对 WARP 用户所做的那样。&lt;/p&gt;
&lt;figure class=&quot;vpc-egress-diagram not-content&quot; aria-label=&quot;Workers VPC public Internet egress through Cloudflare Mesh and Cloudflare Gateway&quot; data-astro-cid-lmo6yva7&gt;&lt;ol class=&quot;flow&quot; data-astro-cid-lmo6yva7&gt;&lt;li class=&quot;flow-step&quot; data-astro-cid-lmo6yva7&gt;&lt;div class=&quot;node-card worker-card&quot; data-astro-cid-lmo6yva7&gt;&lt;div class=&quot;node-header&quot; data-astro-cid-lmo6yva7&gt;&lt;span class=&quot;node-icon worker-icon&quot; aria-hidden=&quot;true&quot; data-astro-cid-lmo6yva7&gt;&lt;svg width=&quot;0.98em&quot; height=&quot;1em&quot; data-astro-cid-lmo6yva7=&quot;true&quot; data-icon=&quot;workers&quot;&gt;&lt;symbol id=&quot;ai:local:workers&quot; viewBox=&quot;0 0 48 49&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m18.63 37.418-9.645-12.9 9.592-12.533-1.852-2.527L5.917 23.595l-.015 1.808 10.86 14.542z&quot;/&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M21.997 6.503h-3.712l13.387 18.3-13.072 17.7h3.735L35.4 24.81z&quot;/&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M29.175 6.503h-3.758l13.598 18.082-13.598 17.918h3.765l12.908-17.01v-1.808z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:local:workers&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;a class=&quot;node-title&quot; href=&quot;https://cloudflaredoc.ubitools.com/workers/&quot; data-astro-cid-lmo6yva7&gt;Worker&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;node-caption&quot; data-astro-cid-lmo6yva7&gt;Calls &lt;code data-astro-cid-lmo6yva7&gt;env.EGRESS.fetch()&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;flow-connector&quot; data-astro-cid-lmo6yva7&gt;&lt;a class=&quot;connector-label&quot; href=&quot;https://cloudflaredoc.ubitools.com/workers-vpc/&quot; data-astro-cid-lmo6yva7&gt;VPC binding&lt;/a&gt;&lt;span class=&quot;connector-arrow&quot; aria-hidden=&quot;true&quot; data-astro-cid-lmo6yva7&gt;↓&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;flow-step&quot; data-astro-cid-lmo6yva7&gt;&lt;div class=&quot;node-card mesh-card&quot; data-astro-cid-lmo6yva7&gt;&lt;div class=&quot;node-header&quot; data-astro-cid-lmo6yva7&gt;&lt;span class=&quot;node-icon mesh-icon&quot; aria-hidden=&quot;true&quot; data-astro-cid-lmo6yva7&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; data-astro-cid-lmo6yva7=&quot;true&quot; data-icon=&quot;cloudflare-mesh&quot;&gt;&lt;symbol id=&quot;ai:local:cloudflare-mesh&quot; viewBox=&quot;0 0 32 32&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M10 6a2 2 0 1 1-4 0 2 2 0 0 1 4 0m6-2a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8 4a2 2 0 1 0 0-4 2 2 0 0 0 0 4M8 11a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4M8 18a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4m0 7a2 2 0 1 0 0 4 2 2 0 0 0 0-4m8-7a2 2 0 1 0 0 4 2 2 0 0 0 0-4&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:local:cloudflare-mesh&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;a class=&quot;node-title&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot; data-astro-cid-lmo6yva7&gt;Cloudflare Mesh&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;node-caption&quot; data-astro-cid-lmo6yva7&gt;Bind via &lt;a class=&quot;inline-pill mesh-pill&quot; href=&quot;https://cloudflaredoc.ubitools.com/workers-vpc/configuration/vpc-networks/&quot; data-astro-cid-lmo6yva7&gt;&lt;code data-astro-cid-lmo6yva7&gt;cf1:network&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;flow-connector&quot; aria-hidden=&quot;true&quot; data-astro-cid-lmo6yva7&gt;&lt;span class=&quot;connector-arrow&quot; data-astro-cid-lmo6yva7&gt;↓&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;flow-step&quot; data-astro-cid-lmo6yva7&gt;&lt;div class=&quot;node-card gateway-card&quot; data-astro-cid-lmo6yva7&gt;&lt;div class=&quot;node-header&quot; data-astro-cid-lmo6yva7&gt;&lt;span class=&quot;node-icon gateway-icon&quot; aria-hidden=&quot;true&quot; data-astro-cid-lmo6yva7&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; data-astro-cid-lmo6yva7=&quot;true&quot; data-icon=&quot;gateway&quot;&gt;&lt;symbol id=&quot;ai:local:gateway&quot; viewBox=&quot;0 0 16 16&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M15.45 7.125h-2.577V3.508l-.41-.408H3.925l-.41.41v3.08h.922V4.023h7.513v7.555H4.438v-1.553h-.923v2.065l.41.41h8.538l.41-.41V8.048H16z&quot;/&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8.453 7.238H0l.517.87H8.97zM9.21 8.51H.755l.517.868h8.453z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:local:gateway&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;a class=&quot;node-title&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot; data-astro-cid-lmo6yva7&gt;Cloudflare Gateway&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;node-caption&quot; data-astro-cid-lmo6yva7&gt;Policies applied:&lt;/p&gt;&lt;div class=&quot;pill-row&quot; data-astro-cid-lmo6yva7&gt;&lt;a class=&quot;policy-pill&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/dns-policies/&quot; data-astro-cid-lmo6yva7&gt;DNS&lt;/a&gt;&lt;a class=&quot;policy-pill&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/http-policies/&quot; data-astro-cid-lmo6yva7&gt;HTTP&lt;/a&gt;&lt;a class=&quot;policy-pill&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/network-policies/&quot; data-astro-cid-lmo6yva7&gt;Network&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;flow-connector&quot; aria-hidden=&quot;true&quot; data-astro-cid-lmo6yva7&gt;&lt;span class=&quot;connector-arrow&quot; data-astro-cid-lmo6yva7&gt;↓&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;flow-step&quot; data-astro-cid-lmo6yva7&gt;&lt;div class=&quot;node-card internet-card&quot; data-astro-cid-lmo6yva7&gt;&lt;div class=&quot;node-header&quot; data-astro-cid-lmo6yva7&gt;&lt;span class=&quot;node-icon internet-icon&quot; aria-hidden=&quot;true&quot; data-astro-cid-lmo6yva7&gt;↗&lt;/span&gt;&lt;span class=&quot;node-title&quot; data-astro-cid-lmo6yva7&gt;Public Internet&lt;/span&gt;&lt;/div&gt;&lt;p class=&quot;node-caption&quot; data-astro-cid-lmo6yva7&gt;Any public hostname or IP&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;a class=&quot;logs-card&quot; href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/insights/logs/dashboard-logs/gateway-logs/&quot; aria-label=&quot;Gateway logs&quot; data-astro-cid-lmo6yva7&gt;&lt;span class=&quot;logs-title&quot; data-astro-cid-lmo6yva7&gt;Gateway logs&lt;/span&gt;&lt;span class=&quot;logs-pills&quot; data-astro-cid-lmo6yva7&gt;&lt;span class=&quot;logs-pill&quot; data-astro-cid-lmo6yva7&gt;DNS&lt;/span&gt;&lt;span class=&quot;logs-pill&quot; data-astro-cid-lmo6yva7&gt;HTTP&lt;/span&gt;&lt;span class=&quot;logs-pill&quot; data-astro-cid-lmo6yva7&gt;Network&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;您默认获得的内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;可见性。&lt;/strong&gt; Worker 出口流量与您的其他流量一起显示在 Gateway &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/dns-policies/&quot;&gt;DNS&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/http-policies/&quot;&gt;HTTP&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/network-policies/&quot;&gt;网络&lt;/a&gt; 日志中，以便您可以审计您的 Workers 在何时调用了什么。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;强制执行。&lt;/strong&gt; 任何其选择器与 Worker 请求相匹配的现有 Gateway 策略都将适用 —— 包括允许/阻止列表、DNS 类别过滤和 HTTP 目标规则。如果您已经为您的员工屏蔽了某个类别，您的 Workers 将继承该屏蔽。&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;vpc_networks&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;EGRESS&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;network_id&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;cf1:network&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;remote&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;vpc_networks&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;binding = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;EGRESS&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;network_id = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;cf1:network&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;remote = &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Egress to a public destination — subject to your Gateway policies and logged&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;EGRESS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;https://api.example.com/data&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Egress to a public destination — subject to your Gateway policies and logged&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;EGRESS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;https://api.example.com/data&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;有关配置选项，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-vpc/configuration/vpc-networks/&quot;&gt;VPC 网络（VPC Networks）&lt;/a&gt;。有关策略编写，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot;&gt;Cloudflare Gateway 流量策略&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category><category>Cloudflare Mesh</category><category>Workers VPC</category></item><item><title>Access - 通过 IdP 联合跨账户共享身份提供商</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-04-idp-federation/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-04-idp-federation/</guid><description>&lt;p&gt;Cloudflare Access 现在支持 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/identity-providers/idp-federation/&quot;&gt;IdP 联合&lt;/a&gt;，这允许组织在多个 Cloudflare 账户之间共享单个身份提供商。&lt;/p&gt;
&lt;p&gt;无需在每个账户中分别配置相同的 IdP（例如 Okta 或 Entra ID），您只需在源账户中配置一次，然后与组织中的其他账户共享它。每个接收方账户都会获得一个只读的 IdP 连接，该连接通过一个桥接（bridge）—— 源账户中一个代理跨账户登录的隐藏应用程序 —— 将身份验证路由回源账户。最终用户使用其现有的 IdP 凭据登录，而每个账户的 Access 策略评估生成的身份就和任何其他 IdP 登录一样。&lt;/p&gt;
&lt;p&gt;关键功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;一个 IdP，多个账户&lt;/strong&gt; — 配置一次您的 IdP，并将其共享给您组织中的所有账户。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生命周期管理&lt;/strong&gt; — 随着账户加入或离开您的 Cloudflare 组织，它们的 IdP 连接会自动预配和删除 —— 无需手动清理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不可变的接收方连接&lt;/strong&gt; — 接收方账户中的 IdP 连接不能被意外修改或删除。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要开始使用，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/identity-providers/idp-federation/&quot;&gt;IdP 联合&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Cloudflare Fundamentals, Workers, D1, R2, KV, Queues, Vectorize, Durable Objects, Containers - 计费使用量和预算警报现已集成到产品侧边栏中</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-04-billable-usage-product-sidebar/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-04-billable-usage-product-sidebar/</guid><description>&lt;p&gt;按需付费（Pay-as-you-go）客户现在可以直接从 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/&quot;&gt;Workers &amp;amp; Pages&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/d1/&quot;&gt;D1&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/&quot;&gt;R2&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/kv/&quot;&gt;Workers KV&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/queues/&quot;&gt;Queues&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/vectorize/&quot;&gt;Vectorize&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/&quot;&gt;Containers&lt;/a&gt; 的产品概览页面查看计费使用量并创建&lt;a href=&quot;https://cloudflaredoc.ubitools.com/changelog/post/2026-04-13-billable-usage-dashboard-and-budget-alerts/&quot;&gt;预算警报&lt;/a&gt;。新的侧边栏小组件显示了当前时期的支出和账单周期日期范围，同时还提供了一个用于创建预算警报的按钮。&lt;/p&gt;
&lt;p&gt;该小组件提取与&lt;a href=&quot;https://cloudflaredoc.ubitools.com/changelog/post/2026-04-13-billable-usage-dashboard-and-budget-alerts/&quot;&gt;计费使用量仪表板&lt;/a&gt;相同的数据，并与您的账单周期（或免费计划中的当前日期）保持一致，因此数据与您的发票相符。目前尚不支持 Enterprise 合约账户。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/2026-06-04-billable-usage-product-sidebar.BUuIokn__ZAx1o6.webp&quot; alt=&quot;Durable Objects 产品侧边栏中的计费使用量小组件，显示当前时期的支出和按服务细分的明细&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2872&quot; height=&quot;1614&quot;&gt;
&lt;p&gt;选择 **Create budget alert（创建预算警报）**会以内联方式打开预算警报流程，以便您在查看使用量的同一位置设置美元阈值。预算警报适用于您在所有产品上的账户级别总支出，而不仅仅是您创建该警报的产品页面。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/billing/&quot;&gt;基于使用量的计费文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Workers</category><category>D1</category><category>R2</category><category>KV</category><category>Queues</category><category>Vectorize</category><category>Durable Objects</category><category>Containers</category></item><item><title>Pipelines, Workers - Pipeline 绑定（binding）配置字段重命名为 stream</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-27-pipeline-binding-stream-field/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-27-pipeline-binding-stream-field/</guid><description>
&lt;p&gt;您的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/configuration/&quot;&gt;Wrangler 配置文件&lt;/a&gt; 中 &lt;code&gt;pipelines&lt;/code&gt; 绑定（binding）配置里的 &lt;code&gt;pipeline&lt;/code&gt; 字段已重命名为 &lt;code&gt;stream&lt;/code&gt;。旧字段已弃用但仍被接受。&lt;/p&gt;
&lt;p&gt;请更新您的配置以使用 &lt;code&gt;stream&lt;/code&gt;，从而避免弃用警告。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;之前（已弃用）：&lt;/strong&gt;&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;$schema&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;pipelines&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MY_PIPELINE&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;pipeline&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;STREAM_ID&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;pipelines&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;binding = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MY_PIPELINE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;pipeline = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;STREAM_ID&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;strong&gt;之后：&lt;/strong&gt;&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;$schema&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;pipelines&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MY_PIPELINE&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;      &quot;stream&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;STREAM_ID&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;pipelines&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;binding = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MY_PIPELINE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;stream = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;STREAM_ID&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;无需进行其他更改。绑定（binding）名称、TypeScript 类型和运行时 API (&lt;code&gt;env.MY_PIPELINE.send(...)&lt;/code&gt;) 保持不变。&lt;/p&gt;
&lt;p&gt;有关配置 pipeline 绑定（binding）的更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/pipelines/streams/writing-to-streams/#configure-pipeline-binding&quot;&gt;写入流&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><product>Pipelines</product><category>Pipelines</category><category>Workers</category></item><item><title>Access - 身份提供商的 SAML 断言加密</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-03-saml-assertion-encryption/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-03-saml-assertion-encryption/</guid><description>&lt;p&gt;Cloudflare Access 现在支持身份提供商集成的 SAML 断言（assertion）加密。开启后，您的身份提供商会在通过用户浏览器发送 SAML 断言之前，使用 Cloudflare 管理的证书对其进行加密。只有 Access 可以解密这些断言，从而在 TLS 终止后也能保护敏感的身份数据。&lt;/p&gt;
&lt;p&gt;如果没有加密，SAML 断言将以明文传输，并且可能会被浏览器扩展或客户端恶意软件看到。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/saml-encryption.J5jmiYv8_ZkhXFT.webp&quot; alt=&quot;身份提供商配置中的 SAML 加密切换开关&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1698&quot; height=&quot;344&quot;&gt;
&lt;p&gt;SAML 加密包括内置的证书生命周期管理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自动生成证书&lt;/strong&gt;：当您为身份提供商开启 SAML 加密时，Access 会生成一个加密证书。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;证书轮换&lt;/strong&gt;：无停机轮换证书。之前的证书在过期前保持有效，为您留出时间来更新 IdP。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PEM 导出&lt;/strong&gt;：复制 PEM 格式的证书以便手动上传到您的 IdP，或者将您的 IdP 指向 SAML 元数据端点以进行自动检索。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要开始使用，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/identity-providers/generic-saml/#encrypt-saml-assertions&quot;&gt;加密 SAML 断言&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Cloudflare Fundamentals - 推出自托管 OAuth 客户端</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-03-public-oauth-clients/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-03-public-oauth-clients/</guid><description>
&lt;p&gt;今天，我们推出了自托管 OAuth，使开发者能够构建通过 OAuth 与 Cloudflare 集成的第三方应用程序。这为 API 令牌提供了一种更安全、更易用且更易于管理的替代方案。&lt;/p&gt;
&lt;p&gt;OAuth 允许第三方应用程序代表用户访问其 Cloudflare 账户。例如，在用户授予同意后，Wrangler 可以将 Workers 部署到该账户中。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新增功能&quot;&gt;新增功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新增功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Cloudflare 开发者现在可以创建和管理他们自己的 OAuth 应用程序，以便与 Cloudflare 集成。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;创建应用程序&quot;&gt;创建应用程序&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#创建应用程序&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;要创建应用程序，请转到 Cloudflare 仪表板中您账户的 &lt;strong&gt;Manage Account（管理账户）&lt;/strong&gt; &amp;gt; &lt;strong&gt;OAuth clients（OAuth 客户端）&lt;/strong&gt;。&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/oauth-clients&quot; data-nb-button class=&quot;group inline-flex w-max shrink-0 items-center justify-center rounded-full font-medium whitespace-nowrap no-underline shadow-xs transition-colors cursor-pointer select-none focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary-hover h-9 gap-1.5 px-3 text-sm&quot; target=&quot;_blank&quot;&gt;Go to &lt;strong&gt;OAuth clients&lt;/strong&gt;&amp;nbsp;&amp;#8599;&lt;/a&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;选择受限范围&quot;&gt;选择受限范围&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#选择受限范围&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;如果您曾使用 API 令牌调用 Cloudflare API，您会对 OAuth 客户端范围感到熟悉。在创建应用程序期间只选择您的应用程序所需的范围，并在向用户发送 Cloudflare 同意请求时包含该范围列表。&lt;/p&gt;
&lt;p&gt;用户可以在同意之前查看请求的范围。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;适用于私有和公共用途的应用程序&quot;&gt;适用于私有和公共用途的应用程序&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#适用于私有和公共用途的应用程序&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;应用程序开始时具有 &lt;code&gt;private&lt;/code&gt; 可见性。私有应用程序只能由创建该应用程序的账户的成员使用。&lt;/p&gt;
&lt;p&gt;要使任何 Cloudflare 用户都能使用该应用程序，请完成 &lt;code&gt;public&lt;/code&gt; 可见性的先决条件。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/oauth/create-an-oauth-client/#private-and-public-clients&quot;&gt;客户端可见性&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;客户端域名验证&quot;&gt;客户端域名验证&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#客户端域名验证&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;在将应用程序公开之前，您必须验证客户端域名。域名验证有助于用户确认应用程序所有者控制着同意页面上显示的域名。&lt;/p&gt;
&lt;p&gt;验证后，用户将在同意页面上看到已验证徽章。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/oauth/create-an-oauth-client/#client-url-domain-ownership-verification&quot;&gt;域名验证&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;了解更多&quot;&gt;了解更多&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#了解更多&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/oauth/&quot;&gt;OAuth 客户端&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Workers - 新增 Workers 批量机密（secrets）API 端点</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-03-bulk-secrets-api/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-03-bulk-secrets-api/</guid><description>&lt;p&gt;您现在可以使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/workers/subresources/scripts/subresources/secrets/methods/bulk_update/&quot;&gt;批量机密端点&lt;/a&gt; 在单个请求中为您的 Worker 创建、更新或删除多个机密（secrets）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;包含具有值的机密以进行创建或更新。&lt;/li&gt;
&lt;li&gt;将机密设置为 &lt;code&gt;null&lt;/code&gt; 以进行删除。&lt;/li&gt;
&lt;li&gt;请求中未包含的机密将保持不变。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下示例创建 &lt;code&gt;API_KEY&lt;/code&gt;，更新已存在的 &lt;code&gt;DB_PASSWORD&lt;/code&gt;，并删除 &lt;code&gt;OLD_SECRET&lt;/code&gt;：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;json&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot; data-nb-lang=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;secrets&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;    &quot;API_KEY&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: { &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;secret_text&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;API_KEY&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-api-key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;    &quot;DB_PASSWORD&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: { &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;secret_text&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;DB_PASSWORD&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-db-password&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;    &quot;OLD_SECRET&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;您可以使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/commands/workers/#secret-bulk&quot;&gt;&lt;code&gt;wrangler secret bulk&lt;/code&gt;&lt;/a&gt; 在命令行中执行相同的操作：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; secret&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bulk&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; secrets.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;要删除某个键，请在 JSON 文件中将其值设置为 &lt;code&gt;null&lt;/code&gt;。&lt;code&gt;.env&lt;/code&gt; 文件不支持删除操作。&lt;/p&gt;
&lt;p&gt;每个请求最多支持 &lt;strong&gt;100 次总操作（包括创建、更新和删除的组合）&lt;/strong&gt;。&lt;/p&gt;</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - 在您操作系统的钥匙串中存储 Wrangler 的 OAuth 凭证</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-03-wrangler-keyring-credential-storage/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-03-wrangler-keyring-credential-storage/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt; 现在可以将 &lt;code&gt;wrangler login&lt;/code&gt; 返回的 OAuth 凭证存储在 &lt;a href=&quot;https://en.wikipedia.org/wiki/Galois/Counter_Mode&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AES-256-GCM&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 加密的文件中，加密密钥保存在您的操作系统钥匙串中。默认行为没有改变 —— 除非您选择启用，否则凭证仍保存在明文 TOML 文件中。&lt;/p&gt;
&lt;p&gt;要选择启用，请运行：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; login&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --use-keyring&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;该选择会在 Wrangler 调用之间持久保存。使用 &lt;code&gt;npx wrangler login --no-use-keyring&lt;/code&gt; 可以取消选择，或者使用 &lt;code&gt;CLOUDFLARE_AUTH_USE_KEYRING&lt;/code&gt; 环境变量覆盖单个命令的首选项。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wrangler whoami&lt;/code&gt; 现在会报告凭证的存储位置：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;🔐&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Credentials&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; are&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; stored&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; in:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Encrypted&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; file&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (~/.config/.wrangler/config/default.enc) with key in macOS Keychain (service&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;wrangler,&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; account&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;各平台后端：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt; 通过 &lt;code&gt;/usr/bin/security&lt;/code&gt; 使用内置的 Keychain。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt; 通过 &lt;code&gt;libsecret-tools&lt;/code&gt; 包中的 &lt;code&gt;secret-tool&lt;/code&gt; CLI 使用 &lt;a href=&quot;https://wiki.gnome.org/Projects/Libsecret&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;libsecret&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt; 通过 &lt;a href=&quot;https://www.npmjs.com/package/@napi-rs/keyring&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;@napi-rs/keyring&lt;/code&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 使用 凭据管理器 (Credential Manager)，该包在您首次选择启用时按需安装。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关完整详细信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/commands/general/#storing-oauth-credentials-in-the-os-keychain&quot;&gt;在操作系统钥匙串中存储 OAuth 凭证&lt;/a&gt;，包括启用/禁用时的迁移行为以及 &lt;code&gt;CLOUDFLARE_AUTH_USE_KEYRING&lt;/code&gt; 环境变量。&lt;/p&gt;</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workflows, Workers - 直接从 Workflow 绑定调度 Workflow 实例</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-02-cron-workflows/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-02-cron-workflows/</guid><description>&lt;p&gt;您现在可以在 &lt;code&gt;wrangler.jsonc&lt;/code&gt; 中直接将 cron 计划附加到 Workflow 绑定（binding）。每次计划运行都会自动创建一个新的 Workflow 实例，因此您无需定义单独的带有 &lt;code&gt;scheduled&lt;/code&gt; 处理程序的 Worker 来按间隔触发您的 Workflow。&lt;/p&gt;
&lt;p&gt;例如，您可以在同一个 Workflow 上配置每小时、每 15 分钟或工作日计划：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;workflows&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-scheduled-workflow&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MY_WORKFLOW&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;class_name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MyScheduledWorkflow&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;schedules&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;0 * * * *&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;*/15 * * * *&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;0 9 * * MON-FRI&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Cron 工作负载获得 Workflows 的所有相同优势，包括内置重试、多步骤持久执行以及 Workflows 的可配置超时。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	WorkflowEntrypoint,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	WorkflowEvent,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	WorkflowStep,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// 根据 wrangler.jsonc 中为 MY_WORKFLOW 绑定定义的每个 cron 计划自动运行。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; MyScheduledWorkflow&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; WorkflowEntrypoint&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; WorkflowEvent&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;step&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; WorkflowStep&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;fetch source data&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; () &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetchSourceData&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// 如果此步骤失败，则仅使用以下自定义逻辑重试此步骤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;process and store results&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				retries: { limit: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, delay: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;30 seconds&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, backoff: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;exponential&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				timeout: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;10 minutes&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; () &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;				await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; processAndStore&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(data);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这使得构建定期计划的作业（例如数据库备份、发票生成、报告聚合和清理任务）变得更加容易，而无需配置单独的 Cron Trigger 入口点。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workflows/build/trigger-workflows/&quot;&gt;触发 Workflows&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 02 Jun 2026 15:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category><category>Workers</category></item><item><title>Agents, Workers - Agents SDK v0.14.0：Agent 技能、信使（messengers）、计划任务、Workflows 以及强化的聊天恢复</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-02-agents-sdk-v0.14.0/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-02-agents-sdk-v0.14.0/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Agents SDK&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 的最新版本添加了四种使用 &lt;code&gt;@cloudflare/think&lt;/code&gt; 进行构建的新方式：按需 Agent 技能（Agent Skills）、聊天信使（chat messengers，从 Telegram 开始）、声明式计划任务以及 Workflows 内部的持久推理步骤。此版本还显著强化了持久聊天恢复，因此轮次能够可靠地度过生产环境中的部署、驱逐和停滞的模型流。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;agent-技能agent-skills实验性&quot;&gt;Agent 技能（Agent Skills）（实验性）&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#agent-技能agent-skills实验性&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;给 agent 一个按需指令、资源和脚本的目录。技能源将目录添加到系统 Prompt 中，而模型仅在任务匹配时才激活技能 —— 因此庞大的功能库不会膨胀每个 Prompt。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think, skills } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; bundledSkills &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;agents:skills&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; SkillsAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	getSkills&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			bundledSkills,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			skills.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;SKILLS_BUCKET&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, { prefix: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;skills/&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think, skills } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; bundledSkills &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;agents:skills&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; SkillsAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	getSkills&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			bundledSkills,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			skills.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;SKILLS_BUCKET&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, { prefix: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;skills/&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;agents:skills&lt;/code&gt; 导入通过 Agents Vite 插件打包本地的 &lt;code&gt;./skills&lt;/code&gt; 目录（每个技能一个目录，每个目录包含一个 &lt;code&gt;SKILL.md&lt;/code&gt;）。技能也可以从 R2 或清单（manifest）中加载。当技能可用时，Think 会暴露 &lt;code&gt;activate_skill&lt;/code&gt;、&lt;code&gt;read_skill_resource&lt;/code&gt; 和一个可选的 &lt;code&gt;run_skill_script&lt;/code&gt; 工具。技能加载是弹性的：重复或失败的源将被跳过并发出警告，而不会损坏 agent。&lt;/p&gt;
&lt;p&gt;Agent 技能处于&lt;strong&gt;实验性&lt;/strong&gt;阶段，尤其是脚本执行还处于早期阶段。API 可能会在未来的版本中发生变化。我们非常期待您的反馈 —— 请在 &lt;a href=&quot;https://github.com/cloudflare/agents/discussions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Agents 仓库&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;中告诉我们您正在构建什么以及缺少了什么。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;信使messengers&quot;&gt;信使（Messengers）&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#信使messengers&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;将 Think agent 直接连接到聊天平台。Think 拥有 Webhook 路由、会话路由、持久回复纤程（durable reply fiber）以及流式传送回提供商。Telegram 作为第一个提供商发布。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	defineMessengers,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	ThinkMessengerStateAgent,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think/messengers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; telegramMessenger &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think/messengers/telegram&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { ThinkMessengerStateAgent };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; SupportAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	getMessengers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; defineMessengers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			telegram: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;telegramMessenger&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				token: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;TELEGRAM_BOT_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				userName: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;support_bot&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				secretToken: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;TELEGRAM_WEBHOOK_SECRET_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			}),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	defineMessengers,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	ThinkMessengerStateAgent,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think/messengers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; telegramMessenger &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think/messengers/telegram&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { ThinkMessengerStateAgent };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; SupportAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	getMessengers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; defineMessengers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			telegram: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;telegramMessenger&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				token: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;TELEGRAM_BOT_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				userName: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;support_bot&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				secretToken: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;TELEGRAM_WEBHOOK_SECRET_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			}),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;默认情况下，每个 Chat SDK 线程都映射到其自己的 Think 子 agent，因此群聊和直接消息不会共享内存。支持多个机器人、自定义会话路由和自定义提供商。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;计划任务&quot;&gt;计划任务&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#计划任务&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;使用类型化的领域特定语言 (DSL) 声明循环的、具有时区感知的 Prompt 和处理器。Think 在启动时协调声明，并在每次运行后重新设定下一次发生，由持久幂等提交提供支持。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think, defineScheduledTasks } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; DigestAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	getScheduledTasks&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; defineScheduledTasks&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			weeklyCommitReport: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				schedule: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;every week on monday at 09:00&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				prompt:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;					&quot;Compile my GitHub commits for the last week and summarize them.&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			workout: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				schedule: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;every day at 08:00 in Europe/London&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				prompt: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Start my workout.&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think, defineScheduledTasks } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; DigestAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	getScheduledTasks&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; defineScheduledTasks&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			weeklyCommitReport: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				schedule: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;every week on monday at 09:00&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				prompt:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;					&quot;Compile my GitHub commits for the last week and summarize them.&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			workout: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				schedule: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;every day at 08:00 in Europe/London&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				prompt: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Start my workout.&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;think-workflows&quot;&gt;Think Workflows&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#think-workflows&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;ThinkWorkflow&lt;/code&gt; 和 &lt;code&gt;step.prompt()&lt;/code&gt; 在 Cloudflare Workflow 内部运行模型驱动的推理步骤，具有持久的类型化结构化输出、长时间等待和审批门槛。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { z } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;zod&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { ThinkWorkflow } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think/workflows&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; draftSchema&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	title: z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	summary: z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	labels: z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;()),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; TriageWorkflow&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ThinkWorkflow&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;step&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; draft&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;prompt&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;triage-issue&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			prompt: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;`Triage issue #${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;issueNumber&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			output: draftSchema,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			timeout: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;3 days&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;apply-labels&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; () &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.agent.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;applyLabels&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(draft.labels);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { z } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;zod&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { ThinkWorkflow } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think/workflows&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { ThinkWorkflowStep } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think/workflows&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { AgentWorkflowEvent } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;agents/workflows&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; draftSchema&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	title: z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	summary: z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	labels: z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(z.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;()),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; TriageWorkflow&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ThinkWorkflow&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;TriageAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Params&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; AgentWorkflowEvent&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Params&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;step&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ThinkWorkflowStep&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; draft&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;prompt&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;triage-issue&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			prompt: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;`Triage issue #${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;issueNumber&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			output: draftSchema,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			timeout: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;3 days&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; step.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;apply-labels&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;async&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; () &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;			await&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.agent.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;applyLabels&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(draft.labels);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;针对持久聊天恢复的生产硬化&quot;&gt;针对持久聊天恢复的生产硬化&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#针对持久聊天恢复的生产硬化&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;持久聊天轮次一直被设计为在轮次途中部署或 Durable Object 驱逐后存活。此版本是针对该机制进行生产硬化的重大更新。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;在部署期间具有更好的恢复能力。&lt;/strong&gt; 轮次现在可以度过持续部署和驱逐，而不会丢失已完成的工作，也不会重新运行已经运行过的工具。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实时的 “recovering…” 信号。&lt;/strong&gt; &lt;code&gt;useAgentChat&lt;/code&gt; 暴露了一个新的 &lt;code&gt;isRecovering&lt;/code&gt; 标志，因此恢复中的轮次会显示进度，而不是看起来像冻结了一样。大多数 UI 将 &lt;code&gt;isStreaming || isRecovering&lt;/code&gt; 渲染为“忙碌（busy）”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;停滞的流恢复。&lt;/strong&gt; 设置 &lt;code&gt;chatStreamStallTimeoutMs&lt;/code&gt; 可以将挂起的提供商流路由到相同的恢复路径中，而不是留下一个无限旋转的加载指示器（spinner）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;子 agent 重新挂载。&lt;/strong&gt; 在父节点恢复时，正在运行的 &lt;code&gt;agentTool()&lt;/code&gt; 子节点会重新挂载到其结果上，而不是被放弃并重新运行，因此长期运行的子节点在部署下不再丢失工作。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;mcp-传输改进&quot;&gt;MCP 传输改进&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#mcp-传输改进&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;可恢复的流&lt;/strong&gt; — 基于服务器发送事件（SSE）的正在运行的工具调用可在连接中断时存活。客户端使用 &lt;code&gt;Last-Event-ID&lt;/code&gt; 重新连接并回放它们遗漏的任何内容。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可读的服务器 ID&lt;/strong&gt; — &lt;code&gt;addMcpServer&lt;/code&gt; 接受一个可选的 &lt;code&gt;id&lt;/code&gt;，因此工具会呈现为可读的键（例如 &lt;code&gt;tool_github_create_pull_request&lt;/code&gt;），而不是不透明的连接 ID。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更好地处理并发请求&lt;/strong&gt; — 重叠的 JSON-RPC 请求现在可以跨 HTTP 和 RPC 传输正确关联到其响应。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;其他改进&quot;&gt;其他改进&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#其他改进&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;压缩&lt;/strong&gt; — &lt;code&gt;Session&lt;/code&gt; 的 &lt;code&gt;tokenCounter&lt;/code&gt; 现在还驱动压缩边界决策（“压缩什么”），而不仅仅是触发/不触发。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;@cloudflare/worker-bundler&lt;/code&gt;&lt;/strong&gt; — 为 &lt;code&gt;createWorker&lt;/code&gt; 添加了 &lt;code&gt;virtualModules&lt;/code&gt; 选项，以便在打包（bundling）期间提供内存中模块源。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;客户端工具继续运行&lt;/strong&gt; — 并行工具结果现在合并为一个单一的继续，立即恢复请求会附加到挂起的继续上，并且服务器端 &lt;code&gt;needsApproval&lt;/code&gt; 继续会在批准后可靠地恢复。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;升级&quot;&gt;升级&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#升级&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;要更新到最新版本：&lt;/p&gt;
&lt;script&gt;
	if (!customElements.get(&quot;nb-pm-restore&quot;)) {
		customElements.define(
			&quot;nb-pm-restore&quot;,
			class extends HTMLElement {
				connectedCallback() {
					const card = this.closest(&quot;[data-nb-pm]&quot;);
					if (!card) return;
					let saved;
					try {
						saved = sessionStorage.getItem(&quot;ui-pm-tab&quot;);
					} catch {
						return;
					}
					if (!saved) return;
					const tabs = card.querySelectorAll(&quot;[data-nb-pm-tab]&quot;);
					let idx = -1;
					tabs.forEach(function (t, i) {
						if (t.textContent.trim() === saved) idx = i;
					});
					if (idx &lt; 1) return;
					tabs.forEach(function (t, i) {
						t.setAttribute(&quot;aria-selected&quot;, String(i === idx));
					});
					card.querySelectorAll(&quot;[data-nb-pm-panel]&quot;).forEach(function (p, i) {
						p.hidden = i !== idx;
					});
				}
			},
		);
	}
&lt;/script&gt;&lt;div data-nb-pm class=&quot;w-full&quot;&gt;&lt;div class=&quot;flex w-full flex-col overflow-hidden rounded-lg text-sm ring ring-border bg-card&quot;&gt;&lt;div class=&quot;flex items-center gap-2 px-3 py-2 text-[0.8125rem] font-medium leading-5 text-muted-foreground bg-[var(--nb-surface-sunken)]&quot; role=&quot;tablist&quot; aria-label=&quot;Package manager&quot;&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;true&quot; aria-controls=&quot;pm-panel-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-npm&quot; id=&quot;pm-tab-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-npm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;npm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-yarn&quot; id=&quot;pm-tab-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-yarn&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;yarn&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-pnpm&quot; id=&quot;pm-tab-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-pnpm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;pnpm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-bun&quot; id=&quot;pm-tab-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-bun&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;bun&lt;/button&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-npm&quot; aria-labelledby=&quot;pm-tab-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-npm&quot; data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; i agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;npm i agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;symbol id=&quot;ai:ph:copy&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;symbol id=&quot;ai:ph:check&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-yarn&quot; aria-labelledby=&quot;pm-tab-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-yarn&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;yarn add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-pnpm&quot; aria-labelledby=&quot;pm-tab-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-pnpm&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;pnpm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;pnpm add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-bun&quot; aria-labelledby=&quot;pm-tab-pm-fd66bb45-89d7-4f41-99d1-ec80dbcf2ac6-bun&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;bun&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;bun add agents@latest @cloudflare/think@latest @cloudflare/ai-chat@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;nb-pm-restore style=&quot;display:contents&quot;&gt;&lt;/nb-pm-restore&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/package-managers/PackageManagers.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/runtime/&quot;&gt;Agents API 参考&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/communication-channels/chat/chat-agents/&quot;&gt;聊天 Agent 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Cloudflare WAN, Cloudflare One - Cisco IOS XE</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-02-cisco-ios-xe/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-02-cisco-ios-xe/</guid><description>&lt;p&gt;用于 Cloudflare WAN 的 Cisco IOS XE 第三方集成指南已更新，包含以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;后量子密码学 (PQC)&lt;/li&gt;
&lt;li&gt;策略路由 (PBR)&lt;/li&gt;
&lt;li&gt;IP 服务水平协议 (IP SLA)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此链接将直接带您进入已更新的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/configuration/third-party/cisco-ios-xe/&quot;&gt;Cisco IOS XE&lt;/a&gt; 指南。&lt;/p&gt;</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category><category>Cloudflare One</category></item><item><title>Logs - Cloudflare Logs 中的新 Turnstile Events Logpush 数据集</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-01-log-fields-updated/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-01-log-fields-updated/</guid><description>&lt;p&gt;Cloudflare 已更新 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;：&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新数据集&quot;&gt;新数据集&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新数据集&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Turnstile Events&lt;/strong&gt;：新数据集，字段包括 &lt;code&gt;ASN&lt;/code&gt;、&lt;code&gt;Action&lt;/code&gt;、&lt;code&gt;BrowserMajor&lt;/code&gt;、&lt;code&gt;BrowserName&lt;/code&gt;、&lt;code&gt;ClientIP&lt;/code&gt;、&lt;code&gt;CountryCode&lt;/code&gt;、&lt;code&gt;EventType&lt;/code&gt;、&lt;code&gt;Hostname&lt;/code&gt;、&lt;code&gt;OSMajor&lt;/code&gt;、&lt;code&gt;OSName&lt;/code&gt;、&lt;code&gt;Sitekey&lt;/code&gt;、&lt;code&gt;Timestamp&lt;/code&gt; 和 &lt;code&gt;UserAgent&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关每个数据集的完整字段定义，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Cloudflare One Client - Cloudflare One Client for macOS (version 2026.5.1155.1)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-warp-macos-beta/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces the new Cloudflare One Client UI for macOS! You can expect a cleaner and more intuitive design as well as easier access to common actions and information. Here are some of the many things we have found our users appreciate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right click context menu to access the most common client actions quickly&lt;/li&gt;
&lt;li&gt;Built-in captive portal login experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Additional Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The client now applies DNS search suffixes configured in your &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/device-profiles&quot;&gt;device profile&lt;/a&gt; / &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/network-policies&quot;&gt;network policy&lt;/a&gt;. Administrators can push a list of DNS search domains that the client appends to single-label queries, alongside any system-configured suffixes. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#dns-search-suffixes&quot;&gt;DNS search suffixes&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Administrators can now control which virtual networks (VNETs) are available to which users via WARP device profile settings in the Zero Trust dashboard. Previously, every VNET in the organization was visible to every device; you can now scope the VNET picker per profile so users only see the networks relevant to them. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#vnet-availability&quot;&gt;VNET availability&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Added a local-file signal source for Emergency Disconnect. In addition to the existing HTTPS polling mechanism, administrators can now configure WARP to monitor for a file on disk; the presence of the file triggers an emergency disconnect even if both Cloudflare and your own infrastructure are unreachable. Either signal being asserted triggers disconnect; both must be cleared for normal operation to resume.&lt;/li&gt;
&lt;li&gt;Added new warp-cli debug commands for interactive connection diagnosis. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs/#extra-debug-logging&quot;&gt;Extra debug logging&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;The local DNS proxy now supports DNSSEC passthrough. DNSSEC-signed responses are forwarded to the application intact (including DO/AD bits and RRSIG records), so applications that validate DNSSEC locally — including resolvers and the dig/drill tooling — work correctly through the client.&lt;/li&gt;
&lt;li&gt;Added a new MDM format for organization-wide settings, including a cleaner way to configure the compliance environment (e.g. FedRAMP). The previous per-configuration approach still works, but the new format is now recommended. See the updated &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#organization_configs&quot;&gt;Cloudflare One MDM documentation&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Client Certificate device-posture checks now support template variables (e.g. &lt;code&gt;${serial_number}&lt;/code&gt;, &lt;code&gt;${device_uuid}&lt;/code&gt;) in the Subject Alternative Name field, matching what the documentation has always claimed. Previously only the Common Name field accepted variables, which broke posture rules that pinned identity to a SAN entry.&lt;/li&gt;
&lt;li&gt;Fixed the in-client captive-portal browser rendering a blank &amp;quot;Success&amp;quot; page on some airline Wi-Fi networks (United inflight Wi-Fi was the reported case). The browser now reliably loads the airline&amp;#39;s real portal page so users can complete sign-in from inside the client instead of having to open a separate browser.&lt;/li&gt;
&lt;li&gt;Fixed an issue in proxy mode where hostnames containing underscores (e.g. ai_app.com) were rejected, breaking apps that depend on such hostnames (notably ChatGPT sandbox apps). The local proxy now accepts underscore-containing hostnames in CONNECT requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;Split tunnel list configuration is not available in the new UI. Management of split tunnel entries is currently only possible via &lt;code&gt;warp-cli tunnel ip&lt;/code&gt; and &lt;code&gt;warp-cli tunnel host&lt;/code&gt;. UI support will be added in a future release.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Fri, 29 May 2026 00:55:38 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Windows (version 2026.5.1155.1)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-warp-windows-beta/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces the new Cloudflare One Client UI for Windows! You can expect a cleaner and more intuitive design as well as easier access to common actions and information. Here are some of the many things we have found our users appreciate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right click context menu to access the most common client actions quickly&lt;/li&gt;
&lt;li&gt;Built-in captive portal login experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Additional Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The client now applies DNS search suffixes configured in your &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/device-profiles&quot;&gt;device profile&lt;/a&gt; / &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/network-policies&quot;&gt;network policy&lt;/a&gt;. Administrators can push a list of DNS search domains that the client appends to single-label queries, alongside any system-configured suffixes. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#dns-search-suffixes&quot;&gt;DNS search suffixes&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Administrators can now control which virtual networks (VNETs) are available to which users via WARP device profile settings in the Zero Trust dashboard. Previously, every VNET in the organization was visible to every device; you can now scope the VNET picker per profile so users only see the networks relevant to them. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#vnet-availability&quot;&gt;VNET availability&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Added mandatory authentication. When enabled via MDM, the Cloudflare One Client blocks all Internet traffic from the moment the machine boots until the user authenticates, closing the visibility gap on newly deployed devices and during re-authentication. See the &lt;a href=&quot;https://blog.cloudflare.com/mandatory-authentication-mfa/&quot;&gt;announcement blog&lt;/a&gt; and &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/windows-no-auth-no-internet/&quot;&gt;documentation&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Added a local-file signal source for Emergency Disconnect. In addition to the existing HTTPS polling mechanism, administrators can now configure WARP to monitor for a file on disk; the presence of the file triggers an emergency disconnect even if both Cloudflare and your own infrastructure are unreachable. Either signal being asserted triggers disconnect; both must be cleared for normal operation to resume.&lt;/li&gt;
&lt;li&gt;Added new warp-cli debug commands for interactive connection diagnosis. See &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs/#extra-debug-logging&quot;&gt;Extra debug logging&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;The local DNS proxy now supports DNSSEC passthrough. DNSSEC-signed responses are forwarded to the application intact (including DO/AD bits and RRSIG records), so applications that validate DNSSEC locally — including resolvers and the dig/drill tooling — work correctly through the client.&lt;/li&gt;
&lt;li&gt;Added a new MDM format for organization-wide settings, including a cleaner way to configure the compliance environment (e.g. FedRAMP). The previous per-configuration approach still works, but the new format is now recommended. See the updated &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#organization_configs&quot;&gt;Cloudflare One MDM documentation&lt;/a&gt; for details.&lt;/li&gt;
&lt;li&gt;Client Certificate device-posture checks now support template variables (e.g. &lt;code&gt;${serial_number}&lt;/code&gt;, &lt;code&gt;${device_uuid}&lt;/code&gt;) in the Subject Alternative Name field, matching what the documentation has always claimed. Previously only the Common Name field accepted variables, which broke posture rules that pinned identity to a SAN entry.&lt;/li&gt;
&lt;li&gt;The UseWebView2 registry value (HKLM\SOFTWARE\Cloudflare\CloudflareWARP\UseWebView2 = y) is once again honored by the new GUI for authentication, so administrators who prefer the embedded WebView2 browser for sign-in can opt back in. This setting was effectively ignored in the previous release; the default browser was always used. This key is now also honored for re-authentications.&lt;/li&gt;
&lt;li&gt;Fixed a crash in the authentication browser when navigating to a site that prompts for browser permissions (microphone, camera, notifications, etc.). The same fix had previously landed for the captive-portal browser; this extends it to the auth browser.&lt;/li&gt;
&lt;li&gt;Fixed an issue in proxy mode where hostnames containing underscores (e.g. ai_app.com) were rejected, breaking apps that depend on such hostnames (notably ChatGPT sandbox apps). The local proxy now accepts underscore-containing hostnames in CONNECT requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An error indicating that Microsoft Edge can&amp;#39;t read and write to its data directory may be displayed during captive portal login; this error is benign and can be dismissed.&lt;/li&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;Split tunnel list configuration is not available in the new UI. Management of Split Tunnel entries is currently only possible via &lt;code&gt;warp-cli tunnel ip&lt;/code&gt; and &lt;code&gt;warp-cli tunnel host&lt;/code&gt;. UI support will be added in a future release.&lt;/li&gt;
&lt;li&gt;Windows ARM may prompt the user to close running applications while trying to install this version. Simply click “Ok” with the default highlighted option.&lt;/li&gt;
&lt;li&gt;DNS resolution may be broken when the following conditions are all true:&lt;ul&gt;
&lt;li&gt;The client is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while the client is connected.&lt;br&gt;To work around this issue, please reconnect the client by selecting &amp;quot;disconnect&amp;quot; and then &amp;quot;connect&amp;quot; in the client user interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Fri, 29 May 2026 00:55:37 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Agents - 通过 Cloudflare Tunnel 分享 sandbox 预览</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-sandbox-named-tunnels/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-sandbox-named-tunnels/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/&quot;&gt;Sandboxes&lt;/a&gt; 可以通过 &lt;code&gt;sandbox.tunnels&lt;/code&gt; 命名空间将容器内运行的服务暴露到公共预览 URL。SDK 在 sandbox 内部使用 &lt;code&gt;cloudflared&lt;/code&gt;，因此你可以在不配置 &lt;code&gt;exposePort()&lt;/code&gt; 或自定义域名的情况下共享正在运行的服务。&lt;/p&gt;
&lt;p&gt;默认情况下，&lt;code&gt;sandbox.tunnels.get(port)&lt;/code&gt; 会在零配置的 &lt;code&gt;*.trycloudflare.com&lt;/code&gt; URL 上创建一个&lt;a href=&quot;https://try.cloudflare.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;快速隧道&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;——无需 Cloudflare 账户、DNS 记录或自定义域名。这非常适合快速开发以及 &lt;code&gt;.workers.dev&lt;/code&gt; 部署。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { getSandbox } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/sandbox&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; sandbox&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; getSandbox&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(env.Sandbox, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-sandbox&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;startProcess&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;python -m http.server 8080&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tunnel&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.tunnels.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;console.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(tunnel.url); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// → https://random-words-here.trycloudflare.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { getSandbox } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/sandbox&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; sandbox&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; getSandbox&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(env.Sandbox, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-sandbox&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;startProcess&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;python -m http.server 8080&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tunnel&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.tunnels.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;console.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(tunnel.url); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// → https://random-words-here.trycloudflare.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;命名隧道&quot;&gt;命名隧道&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#命名隧道&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;如需更多控制，你可以通过 &lt;code&gt;sandbox.tunnels.get(port, { name })&lt;/code&gt; 创建命名隧道。命名隧道绑定一个由 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; 支持的主机名（&lt;code&gt;&amp;lt;name&amp;gt;.&amp;lt;your-zone&amp;gt;&lt;/code&gt;），并在你的区域上创建 CNAME 记录，最终生成类似 &lt;a href=&quot;https://my-app-preview.example.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://my-app-preview.example.com&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 的地址。&lt;/p&gt;
&lt;p&gt;与每次都生成新随机 URL 的快速隧道不同，命名隧道生成的持久 URL 在容器重启后仍然有效。这使命名隧道适用于需要对隧道及其源站进行控制的生产用途。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tunnel&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.tunnels.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, { name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-app-preview&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;console.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(tunnel.url); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// → https://my-app-preview.example.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tunnel&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.tunnels.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;8080&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, { name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-app-preview&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;console.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(tunnel.url); &lt;/span&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// → https://my-app-preview.example.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;调用 &lt;code&gt;sandbox.destroy()&lt;/code&gt; 会在销毁容器的同时拆除 Cloudflare Tunnel 和关联的 DNS 记录，因此不会留下悬空的隧道或记录。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;升级&quot;&gt;升级&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#升级&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;升级到最新版本：&lt;/p&gt;
&lt;script&gt;
	if (!customElements.get(&quot;nb-pm-restore&quot;)) {
		customElements.define(
			&quot;nb-pm-restore&quot;,
			class extends HTMLElement {
				connectedCallback() {
					const card = this.closest(&quot;[data-nb-pm]&quot;);
					if (!card) return;
					let saved;
					try {
						saved = sessionStorage.getItem(&quot;ui-pm-tab&quot;);
					} catch {
						return;
					}
					if (!saved) return;
					const tabs = card.querySelectorAll(&quot;[data-nb-pm-tab]&quot;);
					let idx = -1;
					tabs.forEach(function (t, i) {
						if (t.textContent.trim() === saved) idx = i;
					});
					if (idx &lt; 1) return;
					tabs.forEach(function (t, i) {
						t.setAttribute(&quot;aria-selected&quot;, String(i === idx));
					});
					card.querySelectorAll(&quot;[data-nb-pm-panel]&quot;).forEach(function (p, i) {
						p.hidden = i !== idx;
					});
				}
			},
		);
	}
&lt;/script&gt;&lt;div data-nb-pm class=&quot;w-full&quot;&gt;&lt;div class=&quot;flex w-full flex-col overflow-hidden rounded-lg text-sm ring ring-border bg-card&quot;&gt;&lt;div class=&quot;flex items-center gap-2 px-3 py-2 text-[0.8125rem] font-medium leading-5 text-muted-foreground bg-[var(--nb-surface-sunken)]&quot; role=&quot;tablist&quot; aria-label=&quot;Package manager&quot;&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;true&quot; aria-controls=&quot;pm-panel-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-npm&quot; id=&quot;pm-tab-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-npm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;npm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-yarn&quot; id=&quot;pm-tab-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-yarn&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;yarn&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-pnpm&quot; id=&quot;pm-tab-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-pnpm&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;pnpm&lt;/button&gt;&lt;button role=&quot;tab&quot; type=&quot;button&quot; aria-selected=&quot;false&quot; aria-controls=&quot;pm-panel-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-bun&quot; id=&quot;pm-tab-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-bun&quot; data-nb-pm-tab class=&quot;text-muted-foreground hover:bg-accent hover:text-foreground aria-selected:bg-selected aria-selected:text-foreground focus-visible:outline-ring m-0 cursor-pointer rounded-md border-0 bg-transparent px-2 py-0.5 text-xs leading-5 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2&quot;&gt;bun&lt;/button&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-npm&quot; aria-labelledby=&quot;pm-tab-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-npm&quot; data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; i @cloudflare/sandbox@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;npm i @cloudflare/sandbox@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;symbol id=&quot;ai:ph:copy&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8m-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;symbol id=&quot;ai:ph:check&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;m229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69L218.34 66.34a8 8 0 0 1 11.32 11.32&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-yarn&quot; aria-labelledby=&quot;pm-tab-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-yarn&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;yarn&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add @cloudflare/sandbox@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;yarn add @cloudflare/sandbox@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-pnpm&quot; aria-labelledby=&quot;pm-tab-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-pnpm&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;pnpm&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add @cloudflare/sandbox@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;pnpm add @cloudflare/sandbox@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; id=&quot;pm-panel-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-bun&quot; aria-labelledby=&quot;pm-tab-pm-05535d44-e1f8-4d7f-92e2-99fa89b7f383-bun&quot; hidden data-nb-pm-panel class=&quot;bg-card ring-border relative overflow-hidden rounded-lg text-inherit ring&quot;&gt;&lt;div class=&quot;flex items-stretch&quot;&gt;&lt;pre class=&quot;text-foreground my-0 min-w-0 grow overflow-x-auto border-0 bg-transparent px-4 py-3 font-mono text-sm leading-relaxed whitespace-pre&quot;&gt;&lt;code data-nb-pm-code&gt;&lt;span class=&quot;text-success&quot;&gt;bun&lt;/span&gt;&lt;span class=&quot;text-warning&quot;&gt; add @cloudflare/sandbox@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button type=&quot;button&quot; data-nb-pm-copy data-nb-command=&quot;bun add @cloudflare/sandbox@latest&quot; aria-label=&quot;Copy to clipboard&quot; class=&quot;border-border text-muted-foreground hover:text-foreground focus-visible:outline-ring m-0 flex shrink-0 cursor-pointer items-center justify-center border-0 border-l border-solid bg-transparent px-3 transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2&quot;&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[18px] w-[18px]&quot; data-icon=&quot;ph:copy&quot;&gt;&lt;use href=&quot;#ai:ph:copy&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;hidden h-[18px] w-[18px]&quot; data-icon=&quot;ph:check&quot;&gt;&lt;use href=&quot;#ai:ph:check&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;&lt;nb-pm-restore style=&quot;display:contents&quot;&gt;&lt;/nb-pm-restore&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/package-managers/PackageManagers.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;有关完整的 API 详情，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/sandbox/api/tunnels/&quot;&gt;Sandbox 隧道参考&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category></item><item><title>D1 - D1 迁移通过 `migrations_pattern` 支持嵌套布局</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-06-04-migrations-pattern/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-06-04-migrations-pattern/</guid><description>&lt;p&gt;现在，您可以使用新的 &lt;code&gt;migrations_pattern&lt;/code&gt; D1 绑定（binding）配置，将 &lt;code&gt;wrangler d1 migrations apply&lt;/code&gt; 指向嵌套的迁移布局——例如由 &lt;a href=&quot;https://orm.drizzle.team/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Drizzle&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 生成的布局（&lt;code&gt;migrations/0001_init/migration.sql&lt;/code&gt;）：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;d1_databases&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;DB&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;database_name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-database&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;database_id&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;lt;UUID&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;migrations_dir&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;migrations&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;migrations_pattern&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;migrations/*/migration.sql&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;migrations_pattern&lt;/code&gt; 是一个用于发现迁移文件的 Glob 模式（相对于您的 Wrangler 配置文件）。它的默认值是 &lt;code&gt;${migrations_dir}/*.sql&lt;/code&gt;，因此现有项目无需任何修改即可继续运行。每个迁移的名称都会以相对于 &lt;code&gt;migrations_dir&lt;/code&gt; 的路径记录在 migrations 表中。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请访问 D1 的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/d1/reference/migrations/#nested-migration-layouts&quot;&gt;迁移文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><product>D1</product><category>D1</category></item><item><title>Logs - Cloudflare Logs 中多个 Logpush 数据集的字段更新</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-log-fields-updated/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-log-fields-updated/</guid><description>&lt;p&gt;Cloudflare 已更新 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;：&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;现有数据集的字段更新&quot;&gt;现有数据集的字段更新&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#现有数据集的字段更新&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DEX Device State Events（新增）&lt;/strong&gt;：&lt;code&gt;DeviceRegistrationProfileID&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gateway HTTP（新增）&lt;/strong&gt;：&lt;code&gt;AddedHeaders&lt;/code&gt;、&lt;code&gt;DeletedHeaders&lt;/code&gt; 和 &lt;code&gt;SetHeaders&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP requests（新增）&lt;/strong&gt;：&lt;code&gt;MatchedRules&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关每个数据集的完整字段定义，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Radar - Cloudflare Radar 后量子检查器中的 TLS 漏洞检测</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-radar-pq-tls-bug-detection/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-radar-pq-tls-bug-detection/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; 的&lt;a href=&quot;https://radar.cloudflare.com/post-quantum#website-support&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;后量子 TLS 支持检查器&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;现在还可以报告握手测试期间检测到的 TLS 漏洞。当被扫描的主机存在兼容性问题时，结果中会包含检测到的具体漏洞详情，以及排查和修复每个问题的指导。漏洞部分仅在发现问题的主机中显示。&lt;/p&gt;
&lt;p&gt;检测到的 TLS 漏洞如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Split ClientHello&lt;/strong&gt; — 连接在发送分片后量子 &lt;code&gt;ClientHello&lt;/code&gt; 时失败，但使用经典握手可成功。通常由无法重组分割 TLS 消息的中间件或防火墙引起。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HRR Failure&lt;/strong&gt; — 服务器发送了 &lt;code&gt;HelloRetryRequest&lt;/code&gt;，但之后无法完成握手。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unknown Keyshare&lt;/strong&gt; — 服务器无法处理未知密钥交换算法，并以失败告终，而非按 TLS 1.3 规范要求响应 &lt;code&gt;HelloRetryRequest&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/pq-tls-bug-detection.BrmsVMno_ZIsLXh.webp&quot; alt=&quot;Radar 后量子检查器中的 TLS 漏洞检测结果&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2260&quot; height=&quot;1244&quot;&gt;
&lt;p&gt;漏洞检测数据可通过现有的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/radar/subresources/post_quantum/subresources/tls/methods/support/&quot;&gt;&lt;code&gt;/post_quantum/tls/support&lt;/code&gt;&lt;/a&gt; 端点获取。&lt;/p&gt;
&lt;p&gt;访问&lt;a href=&quot;https://radar.cloudflare.com/post-quantum#website-support&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;后量子加密&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;页面以测试主机。&lt;/p&gt;</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Realtime - Cloudflare 实时 WebSocket 适配器现支持自动重连并可缓冲 WebRTC 媒体</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-websocket-adapter-auto-reconnect/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-websocket-adapter-auto-reconnect/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/&quot;&gt;Cloudflare 实时 SFU&lt;/a&gt; 是一款&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/calls-vs-sfus/&quot;&gt;运行在 Cloudflare 全球网络上的 WebRTC 选择性转发单元&lt;/a&gt;，使您无需管理 SFU 基础设施或区域，即可在全球 WebRTC 客户端之间路由实时音频、视频和数据。&lt;/p&gt;
&lt;p&gt;当您使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/media-transport-adapters/websocket-adapter/&quot;&gt;WebSocket 适配器&lt;/a&gt;将 WebRTC 媒体流传输至 WebSocket 端点时，该适配器现在可在端点短暂断连或重启后自动重连并缓冲音视频。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;将-webrtc-媒体流传输至-websocket-端点&quot;&gt;将 WebRTC 媒体流传输至 WebSocket 端点&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#将-webrtc-媒体流传输至-websocket-端点&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;许多团队还将实时 SFU 用作后端应用程序的媒体层，例如转录、录制、笔记和 Agent 媒体处理服务。这些系统通常需要在后端基础设施中消费来自 SFU 的实时 WebRTC 音频或视频，包括 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/&quot;&gt;Workers&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/&quot;&gt;Containers&lt;/a&gt; 或外部服务，而无需自行运行 WebRTC 客户端。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/media-transport-adapters/websocket-adapter/&quot;&gt;WebSocket 适配器&lt;/a&gt;通过将 WebRTC 媒体从 SFU 以应用程序可消费的载荷形式流式传输至标准 WebSocket 端点来弥合这一差距：&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/media-transport-adapters/websocket-adapter/#media-formats&quot;&gt;PCM 音频帧和 JPEG 视频帧&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;变更内容&quot;&gt;变更内容&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#变更内容&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;当您在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/media-transport-adapters/websocket-adapter/#stream-mode-egress&quot;&gt;Stream 模式（出口）&lt;/a&gt;下使用 WebSocket 适配器将实时音视频从 SFU 发送到您自己的 WebSocket 端点时，SFU 现在会在端点短暂断连或重启后&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/media-transport-adapters/websocket-adapter/#automatic-reconnection-for-streaming&quot;&gt;自动重连&lt;/a&gt;。这对于长时间运行的媒体管道尤其有用，因为在录制、转录或实时分析任务仍在进行时，WebSocket 端点可能会短暂重启。&lt;/p&gt;
&lt;p&gt;此前，WebSocket 端点的短暂断连可能导致适配器关闭，需要应用程序在媒体恢复前重新创建适配器。现在，SFU 无需更改 API 即可重试同一端点长达 5 秒。如果端点在此时间窗口内恢复，音视频传输将自动恢复。&lt;/p&gt;
&lt;p&gt;重连行为还包含&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/media-transport-adapters/websocket-adapter/#media-buffering-during-reconnect&quot;&gt;实时优先媒体缓冲&lt;/a&gt;，因此短暂中断可减少媒体丢失，而无需重播过时视频。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;重连行为&quot;&gt;重连行为&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#重连行为&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;重连期间：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;音频使用有限的短暂积压队列来减少可听见的丢失。如果中断时间超过积压队列的覆盖范围，较旧的音频可能会被丢弃。&lt;/li&gt;
&lt;li&gt;视频从&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/media-transport-adapters/websocket-adapter/#video-jpeg&quot;&gt;最新可用的 JPEG 帧&lt;/a&gt;恢复，而不是重播过时帧。&lt;/li&gt;
&lt;li&gt;恢复为尽力而为，不保证无间隙或精确一次传递。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果端点在 5 秒重连窗口后仍不可用，适配器将关闭并必须重新创建。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;了解更多&quot;&gt;了解更多&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#了解更多&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/media-transport-adapters/websocket-adapter/&quot;&gt;WebSocket 适配器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/media-transport-adapters/websocket-adapter/#automatic-reconnection-for-streaming&quot;&gt;流传输的自动重连&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/get-started/&quot;&gt;实时 SFU 快速入门&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/example-architecture/&quot;&gt;实时 SFU 示例架构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/sfu/calls-vs-sfus/&quot;&gt;实时 SFU 与普通 SFU 的比较&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realtime-sfu.dev-demos.workers.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;全球 SFU 网络可视化&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><product>Realtime</product><category>Realtime</category></item><item><title>Security Center - 安全扫描更频繁</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-security-insights-default-scans/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-29-security-insights-default-scans/</guid><description>&lt;p&gt;Security Insights 扫描现在运行得更频繁。Cloudflare 对 Free 账户&lt;strong&gt;每 7 天&lt;/strong&gt;扫描一次，对 Pro 和 Business 账户&lt;strong&gt;每 3 天&lt;/strong&gt;扫描一次，对 Enterprise 账户&lt;strong&gt;每天&lt;/strong&gt;进行扫描。&lt;/p&gt;
&lt;p&gt;此外，现在所有账户和区域默认都会接受扫描。在 Cloudflare 检查您的账户是否存在配置错误、漏洞和其他安全风险之前，您不再需要手动启用扫描。&lt;/p&gt;
&lt;p&gt;任何计划现在都可以使用细粒度的按需扫描。您可以从 Cloudflare 仪表板触发针对任何区域、见解或见解类型的按需扫描，以便在解决问题后快速重新检查您的安全状况。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/security/security-insights/&quot;&gt;Security Insights 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Access - 用于 MCP 服务器门户的工具和提示词别名</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-mcp-portal-tool-prompt-aliases/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-mcp-portal-tool-prompt-aliases/</guid><description>&lt;p&gt;当您通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot;&gt;MCP 服务器门户&lt;/a&gt;连接第三方 MCP 服务器时，您无法控制服务器作者如何命名工具或编写描述。不明确的名称使 AI 代理更难选择正确的工具，也使用户更难理解可用内容。&lt;/p&gt;
&lt;p&gt;您现在可以直接在门户上&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/ai-controls/mcp-portals/#rename-tools-and-prompts-with-aliases&quot;&gt;重命名工具和提示词&lt;/a&gt;并重写其描述，而无需修改上游服务器。例如，名为 &lt;code&gt;super_cool_tool&lt;/code&gt; 的工具可以变成 &lt;code&gt;search_customer_records&lt;/code&gt;，并配有专门针对您组织定制的描述。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/portal-edit-tool-modal.DrxORhBl_Z1NtRnj.webp&quot; alt=&quot;显示 MCP 服务器工具的名称和描述字段的编辑工具模态框&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1640&quot; height=&quot;1144&quot;&gt;
&lt;p&gt;修改后的工具会在工具列表中显示 **Modified（已修改）**标签，以便管理员一眼就能看出哪些工具被自定义过。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/portal-tools-authorized-modified.B674Xvip_12xxcK.webp&quot; alt=&quot;在重命名的工具上显示已修改标签的授权工具列表&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1862&quot; height=&quot;700&quot;&gt;
&lt;p&gt;别名会覆盖 MCP 客户端接收到的元数据。您可以在两个层级设置它们：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;针对每个门户&lt;/strong&gt;：仅在特定门户内适用。优先级高于服务器级别的别名。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;针对每个服务器&lt;/strong&gt;：适用于所有使用该服务器的门户。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您可以随时重置别名以恢复原始的上游名称。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/ai-controls/mcp-portals/#rename-tools-and-prompts-with-aliases&quot;&gt;工具和提示词别名&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Browser Run - 直接从 Workers 使用 Browser Run Quick Actions</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-use-browser-run-quick-actions-directly-from-workers/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-use-browser-run-quick-actions-directly-from-workers/</guid><description>
&lt;p&gt;您现在可以使用浏览器绑定（browser binding）上的 &lt;code&gt;quickAction()&lt;/code&gt; 方法，直接从 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/&quot;&gt;Cloudflare Worker&lt;/a&gt; 调用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/&quot;&gt;Browser Run Quick Actions&lt;/a&gt;。这消除了对 API 令牌或外部 HTTP 请求的需求，从而简化了 Workers 与 Browser Run 的交互方式。您的 Worker 会在 Cloudflare 的网络上直接与 Browser Run 进行通信，使得代码更简单，延迟更低。&lt;/p&gt;
&lt;p&gt;通过 &lt;code&gt;quickAction()&lt;/code&gt; 方法，您可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从 URL 或 HTML &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/screenshot-endpoint/&quot;&gt;截取屏幕截图&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;生成带有自定义样式、页眉和页脚的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/pdf-endpoint/&quot;&gt;PDF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;从完全渲染的页面中 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/content-endpoint/&quot;&gt;提取 HTML 内容&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/markdown-endpoint/&quot;&gt;将页面转换为 Markdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;使用 AI &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/json-endpoint/&quot;&gt;提取结构化 JSON&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;使用 CSS 选择器 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/scrape-endpoint/&quot;&gt;抓取元素&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;从页面 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/links-endpoint/&quot;&gt;获取所有链接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/snapshot/&quot;&gt;截取快照&lt;/a&gt;（在一次请求中捕获 HTML + 屏幕截图）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要开始使用，请将浏览器绑定（browser binding）添加到您的 Wrangler 配置中：&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;compatibility_date&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;2026-03-24&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  &quot;browser&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;    &quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;BROWSER&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;compatibility_date = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;2026-03-24&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;binding = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;BROWSER&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;然后直接从您的 Worker 调用任何 Quick Action。例如，要截取屏幕截图：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; screenshot&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;BROWSER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;quickAction&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;screenshot&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	url: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;https://www.cloudflare.com/&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; screenshot&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;BROWSER&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;quickAction&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;screenshot&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;  url: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;https://www.cloudflare.com/&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;quickAction()&lt;/code&gt; 方法需要 &lt;code&gt;2026-03-24&lt;/code&gt; 或更晚的兼容性日期。&lt;/p&gt;
&lt;p&gt;有关设置说明和可用操作的完整列表，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/browser-run/quick-actions/&quot;&gt;Browser Run Quick Actions&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Browser Run</product><category>Browser Run</category></item><item><title>Cloudflare Mesh, Cloudflare One - Cloudflare Mesh 高可用性副本管理</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-mesh-ha-replica-ui/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-mesh-ha-replica-ui/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot;&gt;Cloudflare Mesh&lt;/a&gt; 仪表板现在显示&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/high-availability/&quot;&gt;高可用性&lt;/a&gt;节点的单副本详情。您可以查看哪个副本是活动状态，查看每个副本的 Mesh IP 和连接详情，并手动触发故障转移——这一切都可以从节点详情页面完成。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/mesh-ha-replicas.Dvf1GMmQ_Z2i6nGi.webp&quot; alt=&quot;Mesh HA 副本选项卡，显示具有单副本 Mesh IP 的活动和备用副本，以及手动故障转移选项&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1800&quot; height=&quot;1155&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新增功能&quot;&gt;新增功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新增功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;节点详情页面上的&lt;strong&gt;副本选项卡&lt;/strong&gt;——在副本之间切换以查看每个副本的 Mesh IP、边缘数据中心、源站 IP、平台、版本和运行时间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;活动/备用（Active/passive）徽章&lt;/strong&gt;，用于识别当前正在路由流量的副本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手动故障转移&lt;/strong&gt;——只需单击一下即可将备用副本提升为活动状态。先前的活动副本将切换为备用（standby）状态。&lt;/li&gt;
&lt;li&gt;概览表中的 &lt;strong&gt;HA 徽章&lt;/strong&gt;，用于识别运行多个副本的节点。&lt;/li&gt;
&lt;li&gt;概览表中显示的&lt;strong&gt;活动副本 IP&lt;/strong&gt;——仪表板现在会解析出哪个副本处于活动状态并显示正确的 Mesh IP。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;手动故障转移&quot;&gt;手动故障转移&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#手动故障转移&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;要手动提升备用副本：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/mesh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare 仪表板&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;中，前往 &lt;strong&gt;Networking（网络）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Mesh&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;选择启用了 HA 的节点。&lt;/li&gt;
&lt;li&gt;选择备用副本选项卡。&lt;/li&gt;
&lt;li&gt;选择 &lt;strong&gt;Promote to active（提升为活动）&lt;/strong&gt; 并确认。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;流量会立即重定向到提升后的副本。有关故障转移行为的详情，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/high-availability/&quot;&gt;高可用性&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Cloudflare Mesh</product><category>Cloudflare Mesh</category><category>Cloudflare One</category></item><item><title>Containers - Wrangler 支持用于 Containers 的 SSH ProxyCommand</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-ssh-proxy-command/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-ssh-proxy-command/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt; 支持将 &lt;code&gt;wrangler containers ssh&lt;/code&gt; 作为 OpenSSH &lt;code&gt;ProxyCommand&lt;/code&gt; 用于 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/&quot;&gt;Containers&lt;/a&gt;。这允许您的本地 SSH 客户端通过 Wrangler 连接到正在运行的 Container。&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;ssh&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -o&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; ProxyCommand=&quot;wrangler containers ssh %h&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; cloudchamber@&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;INSTANCE_I&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;当标准输入和输出被管道传输时，Wrangler 会将数据转发到 Container 中的 SSH 服务器。您也可以传递 &lt;code&gt;--stdio&lt;/code&gt; 来强制使用此模式。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/ssh/&quot;&gt;SSH 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Email Service - 发送带有命名收件人地址的电子邮件</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-named-email-recipients/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-named-email-recipients/</guid><description>
&lt;p&gt;除了现有的 &lt;code&gt;from&lt;/code&gt; 支持外，您现在还可以在发送电子邮件时为收件人地址添加显示名称。为 &lt;code&gt;to&lt;/code&gt;、&lt;code&gt;cc&lt;/code&gt;、&lt;code&gt;bcc&lt;/code&gt;、&lt;code&gt;replyTo&lt;/code&gt; 或 &lt;code&gt;from&lt;/code&gt; 传递一个包含 &lt;code&gt;email&lt;/code&gt; 和可选 &lt;code&gt;name&lt;/code&gt; 字段的对象：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;js&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.js&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;EMAIL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			from: { email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;support@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Support Team&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			to: { email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;jane@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Jane Doe&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			cc: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;				&quot;manager@company.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				{ email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;team@company.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Engineering Team&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			subject: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Welcome!&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			html: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;h1&gt;Thanks for joining!&amp;#x3C;/h1&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			text: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Thanks for joining!&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; Response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ messageId: response.messageId });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.ts&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Promise&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;EMAIL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			from: { email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;support@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Support Team&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			to: { email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;jane@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Jane Doe&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			cc: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;				&quot;manager@company.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				{ email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;team@company.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Engineering Team&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			subject: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Welcome!&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			html: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;h1&gt;Thanks for joining!&amp;#x3C;/h1&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			text: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Thanks for joining!&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; Response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ messageId: response.messageId });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;satisfies&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ExportedHandler&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;为实现向后兼容，纯字符串形式仍受到完整支持，并且您可以在同一个数组中混合使用字符串和命名对象。&lt;/p&gt;
&lt;p&gt;有关完整的请求示例，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/api/send-emails/workers-api/&quot;&gt;Workers API&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/email-service/api/send-emails/rest-api/&quot;&gt;REST API&lt;/a&gt; 文档。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>Pipelines - Pipelines 计费方案公布</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-pipelines-pricing-announced/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-pipelines-pricing-announced/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/pipelines/&quot;&gt;Cloudflare Pipelines&lt;/a&gt; 是一个流数据平台，可摄取事件，使用 SQL 对其进行转换，并将 JSON、Parquet 或 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 表写入 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/&quot;&gt;R2&lt;/a&gt;。Pipelines 现在公布了基于两个使用维度的计费方案：SQL 转换处理的数据量以及交付到接收器（sink）的数据量。输入（ingress）到 Pipeline 流是免费的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;计费尚未启用。我们将在开始对 Pipelines 使用进行收费之前至少提前 30 天通知。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pipelines 的计费模型旨在根据您的实际使用量按 GB 收费：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Streams (ingress)&lt;/strong&gt;：免费，无论数据量大小。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL 转换&lt;/strong&gt;：无状态转换（过滤、重塑、展开、转换、计算）为 0.04 美元 / GB。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sinks&lt;/strong&gt;：JSON 输出为 0.03 美元 / GB，Parquet 或 Iceberg 输出为 0.06 美元 / GB。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Workers 免费计划包括每个维度每月 1 GB。Workers 付费计划包括每月 50 GB。&lt;/p&gt;
&lt;p&gt;有关完整定价详情和计费示例，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/pipelines/platform/pricing/&quot;&gt;Pipelines 计费&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Pipelines</product><category>Pipelines</category></item><item><title>R2 SQL - R2 SQL 定价公布</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-r2-sql-pricing-announced/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-r2-sql-pricing-announced/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt; 是一个无服务器分布式查询引擎，可对存储在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 中的 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 表运行 SQL。R2 SQL 现在已发布基于单一维度的定价：即执行查询所扫描的压缩数据量。R2 SQL 的价格为 2.50 美元/TB（0.0025 美元/GB），仅为 AWS Athena 成本的一半，且不到 Google BigQuery 按需付费价格的一半。&lt;/p&gt;
&lt;p&gt;计费尚未启用。在开始对 R2 SQL 使用收费之前，我们将至少提前 30 天通知。&lt;/p&gt;
&lt;p&gt;扫描的数据量是以从 R2 对象存储中读取的压缩字节数来衡量的。这与您在 R2 存储桶中看到的相符——如果一个 Parquet 文件在磁盘上是 100 MB，那么扫描该文件将按 100 MB 计费。每个查询的最小计费增量为 10 MB。&lt;/p&gt;
&lt;p&gt;免费计划每月包含 1 GB，付费计划每月包含 10 GB。标准的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/pricing/&quot;&gt;R2 存储和操作费用&lt;/a&gt; 以及 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/platform/pricing/&quot;&gt;R2 Data Catalog 费用&lt;/a&gt; 单独计算。&lt;/p&gt;
&lt;p&gt;有关完整的定价详细信息和计费示例，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/platform/pricing/&quot;&gt;R2 SQL 定价&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>R2 SQL</product><category>R2 SQL</category></item><item><title>R2 - R2 Data Catalog 定价公告</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-r2-data-catalog-pricing-announced/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-r2-data-catalog-pricing-announced/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 是直接内置于 R2 存储桶的托管 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 数据目录，可被 Spark、Snowflake 和 DuckDB 等任何 Iceberg 兼容引擎查询。R2 Data Catalog 现在已公布目录操作和表压缩的定价，此外还有标准的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/pricing/&quot;&gt;R2 存储和操作&lt;/a&gt;费用。&lt;/p&gt;
&lt;p&gt;计费尚未启用。在开始对 R2 Data Catalog 使用量收费之前，我们将提前至少 30 天通知。&lt;/p&gt;
&lt;p&gt;定价基于两个维度：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目录操作&lt;/strong&gt;：每百万次操作 $9.00，适用于创建表、读取表元数据和更新表属性等元数据请求。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;压缩&lt;/strong&gt;：每处理 1 GB 数据 $0.005，每处理 100 万个对象 $2.00。这些费用仅在为表启用自动压缩时产生。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两个维度均包含月度免费套餐：100 万次目录操作、10 GB 压缩数据处理量和 100 万个压缩对象处理量。&lt;/p&gt;
&lt;p&gt;有关完整定价详情和计费示例，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/platform/pricing/&quot;&gt;R2 Data Catalog 定价&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>R2 - R2 Data Catalog 获得专属仪表板体验</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-r2-data-catalog-dashboard/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-r2-data-catalog-dashboard/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 是直接内置于 R2 存储桶的托管 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 数据目录。它公开标准 Iceberg REST 目录接口，因此您可以将 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/config-examples/spark-scala/&quot;&gt;Spark&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/config-examples/snowflake/&quot;&gt;Snowflake&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/config-examples/duckdb/&quot;&gt;DuckDB&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt; 等查询引擎连接到 R2 中的数据。&lt;/p&gt;
&lt;p&gt;R2 Data Catalog 现在在 Cloudflare 仪表板中拥有专属部分，取代了之前嵌入在 R2 存储桶配置中的设置面板。新体验包括：&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/data-catalog-dashboard.BsKDvUQn_Z1Twgl3.webp&quot; alt=&quot;R2 Data Catalog 仪表板概览&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3070&quot; height=&quot;1486&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目录概览&lt;/strong&gt; — 在一个地方查看所有目录，一览目录请求数量、存储桶大小和表维护状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;引导式设置向导&lt;/strong&gt; — 通过三个步骤创建目录：选择或创建 R2 存储桶、配置表维护（压缩和快照过期）、然后确认。向导会自动创建存储桶并生成服务凭证。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;设置管理&lt;/strong&gt; — 每个目录的专属设置页面，包含常规配置、表维护、服务凭证和禁用目录等部分。您现在可以直接从仪表板启用和配置&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/table-maintenance/&quot;&gt;快照过期&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内置指标&lt;/strong&gt; — 每个目录的指标标签上有五个图表：已压缩字节数、已压缩文件数、目录请求数、存储大小和已过期快照数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要开始使用，请在 Cloudflare 仪表板中转到 &lt;strong&gt;R2 Data Catalog&lt;/strong&gt;，或参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/get-started/&quot;&gt;快速入门指南&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/manage-catalogs/&quot;&gt;管理目录文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>Realtime - 在 RealtimeKit 中录制特定参与者的音频轨道</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-realtimekit-track-recording/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-28-realtimekit-track-recording/</guid><description>&lt;p&gt;您现在可以使用 RealtimeKit 的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/recording-guide/track-recording/&quot;&gt;轨道录制&lt;/a&gt;功能录制特定参与者的音频轨道。轨道录制为每位参与者创建单独的 WebM 文件，而非单一的合成录制，这对后期处理、转录以及受监管或内容敏感的工作流非常有用。&lt;/p&gt;
&lt;p&gt;要录制特定参与者，在启动轨道录制时传入 &lt;code&gt;user_ids&lt;/code&gt;：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --request&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --url&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;account_i&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;app_i&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/recordings/track&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Authorization: Bearer &amp;lt;api_token&amp;gt;&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Content-Type: application/json&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  &quot;meeting_id&quot;: &quot;97440c6a-140b-40a9-9499-b23fd7a3868a&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  &quot;user_ids&quot;: [&quot;user-123&quot;, &quot;user-456&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;要在选择性轨道录制中传入 &lt;code&gt;user_ids&lt;/code&gt;，需使用以下最低 SDK 版本：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web Core：&lt;code&gt;@cloudflare/realtimekit&lt;/code&gt; 版本 &lt;code&gt;1.4.0&lt;/code&gt; 或更高&lt;/li&gt;
&lt;li&gt;Web UI Kit：&lt;code&gt;@cloudflare/realtimekit-ui&lt;/code&gt;、&lt;code&gt;@cloudflare/realtimekit-react-ui&lt;/code&gt; 或 &lt;code&gt;@cloudflare/realtimekit-angular-ui&lt;/code&gt; 版本 &lt;code&gt;1.1.2&lt;/code&gt; 或更高&lt;/li&gt;
&lt;li&gt;Android Core 或 iOS Core：版本 &lt;code&gt;2.0.0&lt;/code&gt; 或更高&lt;/li&gt;
&lt;li&gt;Android UI Kit 或 iOS UI Kit：版本 &lt;code&gt;1.1.0&lt;/code&gt; 或更高&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/&quot;&gt;RealtimeKit&lt;/a&gt; 提供 SDK 和 UI 组件，让您可以在 Cloudflare 的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/#realtime-sfu&quot;&gt;全球 WebRTC 基础设施&lt;/a&gt;上构建自己的会议体验。如今，各团队正在 RealtimeKit 上为全球受众构建从远程医疗到在线教育的各类产品。您可以通过我们的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/realtime/realtimekit/quickstart/&quot;&gt;快速入门&lt;/a&gt;立即上手，或参考我们的 &lt;a href=&quot;https://github.com/cloudflare/meet&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Meet 仓库&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 作为参考。&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Realtime</product><category>Realtime</category></item><item><title>Cloudflare One, Gateway - 在 Cloudflare One 中使用自然语言编写正则表达式 (regex)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-27-cloudy-regex-assistance/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-27-cloudy-regex-assistance/</guid><description>&lt;p&gt;支持正则表达式的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot;&gt;Cloudflare Gateway&lt;/a&gt; 策略选择器现在可以在仪表板中使用自然语言编写。当使用基于正则表达式的选择器（例如 &lt;code&gt;matches regex&lt;/code&gt;）构建&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/expression-syntax/&quot;&gt;策略&lt;/a&gt;时，您可以用简明英语描述您想要匹配的内容，Cloudflare Agent 将生成并验证相应的正则表达式。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/gateway-regex-ai-generation.CtJ0S6FS_Z1WVe4K.webp&quot; alt=&quot;使用自然语言编写策略正则表达式&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1000&quot; height=&quot;638&quot;&gt;
&lt;p&gt;要开始使用，请在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot;&gt;Gateway 策略构建器&lt;/a&gt;中选择兼容正则表达式的选择器，然后选择该图标。您将看到一个用于输入自然语言的字段，例如“以 /api/v1 开头的任何 URL”或“主机中包含 &lt;code&gt;gooogle&lt;/code&gt; 的 .com、.net 和 .app 主机”。&lt;/p&gt;
&lt;p&gt;您还可以使用该工具来解释现有的正则表达式。如果策略中已包含正则表达式模式，您可以立即生成通俗易懂的语言描述。&lt;/p&gt;
&lt;p&gt;内置的反馈机制允许您对每次交互进行评分，以帮助随着时间推移提高输出质量。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot;&gt;Cloudflare One 防火墙策略&lt;/a&gt;，并期待很快在&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/data-loss-prevention/&quot;&gt;数据防泄露（DLP）配置文件&lt;/a&gt;中支持相同的功能。&lt;/p&gt;</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Gateway</category></item><item><title>Cloudflare Images - Images 中的转换流（flows）</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-27-transformation-flows/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-27-transformation-flows/</guid><description>&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/custom-flow.DeAGR8BY_iGLSK.webp&quot; alt=&quot;自定义流配置面板&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1654&quot; height=&quot;1398&quot;&gt;
&lt;p&gt;流（Flows）是自动规则，它将条件（例如文件扩展名、URL 路径或查询参数）与参数进行匹配。您可以设置一个流，以自动将图像优化应用到您区域上的匹配请求，而无需编写代码或更改 URL。&lt;/p&gt;
&lt;p&gt;转换流有两种模式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/transformations/flows/#set-up-a-provider-flow&quot;&gt;提供商流（Provider flows）&lt;/a&gt;&lt;/strong&gt; — 从其他图像优化服务进行迁移。您现有的 URL 将继续工作，同时 Cloudflare 会将特定提供商的参数重写为 Cloudflare 对应的参数。目前，Cloudflare 支持针对 Fastly Image Optimizer 的提供商流。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/transformations/flows/#set-up-a-custom-flow&quot;&gt;自定义流（Custom flows）&lt;/a&gt;&lt;/strong&gt; — 为自动格式转换、具有 &lt;code&gt;width=auto&lt;/code&gt; 的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/make-responsive-images/#using-widthauto&quot;&gt;响应式大小调整&lt;/a&gt;或基于目录的优化等使用场景定义您自己的条件和操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;若要开始使用，请转到 &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/images/transformations&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare 仪表板&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;中的 &lt;strong&gt;Images&lt;/strong&gt; &amp;gt; &lt;strong&gt;Transformations（转换）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Automation（自动化）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;详细了解&lt;a href=&quot;https://cloudflaredoc.ubitools.com/images/optimization/transformations/flows/&quot;&gt;转换流&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><product>Cloudflare Images</product><category>Cloudflare Images</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE - Cloudflare Tunnel 现在在启动时运行连接性预检查</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-27-cloudflared-connectivity-prechecks/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-27-cloudflared-connectivity-prechecks/</guid><description>&lt;p&gt;从 &lt;a href=&quot;https://github.com/cloudflare/cloudflared/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;cloudflared&lt;/code&gt; 版本 2026.5.2&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 开始，&lt;a href=&quot;https://cloudflaredoc.ubitools.com/tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; 直接在二进制文件内部自动执行整个&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/connectivity-prechecks/&quot;&gt;连接性预检查工作流程&lt;/a&gt;。以前，客户必须安装 &lt;code&gt;dig&lt;/code&gt; 和 &lt;code&gt;netcat&lt;/code&gt; 并手动运行这些命令来验证其环境。现在 &lt;code&gt;cloudflared&lt;/code&gt; 在启动时以原生方式执行此操作 — 并在某些内容被阻止时提供可操作的修正提示。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/cloudflared-connectivity-prechecks.DRwN6tGe_c1XGu.webp&quot; alt=&quot;cloudflared 连接性预检查输出&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1800&quot; height=&quot;1012&quot;&gt;
&lt;p&gt;在每次运行 &lt;code&gt;cloudflared tunnel run&lt;/code&gt;（以及 &lt;code&gt;cloudflared tunnel diag&lt;/code&gt;）时，二进制文件现在都会原生检查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DNS 解析&lt;/strong&gt; — &lt;code&gt;region1.v2.argotunnel.com&lt;/code&gt; 和 &lt;code&gt;region2.v2.argotunnel.com&lt;/code&gt; 解析为有效的 Cloudflare IP。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;传输连接性&lt;/strong&gt; — 端口 &lt;code&gt;7844&lt;/code&gt; 上的出站 &lt;code&gt;UDP (QUIC)&lt;/code&gt; 和 &lt;code&gt;TCP (HTTP/2)&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Management API&lt;/strong&gt; — 发往 &lt;code&gt;api.cloudflare.com&lt;/code&gt; 的出站 &lt;code&gt;TCP/443&lt;/code&gt;，用于软件更新。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;结果将以可扫描的 CLI 表格形式打印，包含以下三种状态：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;通过&lt;/strong&gt; — 检查成功。&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;警告&lt;/strong&gt; — 非阻塞问题，例如 Management API 无法访问，因此自动更新将无法工作，但 Tunnel 仍会启动。&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;失败&lt;/strong&gt; — 阻塞问题，并附有具体的修正提示（例如 &lt;code&gt;Allow outbound UDP on port 7844&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果 DNS 无法解析，或者端口 7844 上的 UDP 和 TCP &lt;strong&gt;双双&lt;/strong&gt;失败，&lt;code&gt;cloudflared&lt;/code&gt; 将提前退出并报告失败，而不是在不透明的 &lt;code&gt;failed to dial&lt;/code&gt; 错误中循环。&lt;/p&gt;
&lt;p&gt;现在每次启动都会自动运行预检查，这还能捕获诸如通宵防火墙策略变更之类的问题退化 — 无需记得重新运行故障排除指南。&lt;/p&gt;
&lt;p&gt;要获取这一新行为，请将 &lt;code&gt;cloudflared&lt;/code&gt; 升级到版本 &lt;code&gt;2026.5.2&lt;/code&gt; 或更高版本。欲了解更多细节，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/connectivity-prechecks/&quot;&gt;连接性预检查文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category></item><item><title>Cloudflare One Client - Cloudflare One Client for macOS (version 2026.4.1390.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-warp-macos-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces the new Cloudflare One Client UI for macOS! You can expect a cleaner and more intuitive design as well as easier access to common actions and information. Here are some of the many things we have found our users appreciate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right click context menu to access the most common client actions quickly&lt;/li&gt;
&lt;li&gt;Built-in captive portal login experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Additional Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added a new CLI command: warp-cli mdm refresh. This command executes an immediate refresh of the Mobile Device Management (MDM) configuration file.&lt;/li&gt;
&lt;li&gt;Fixed a proxy mode connection stall issue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;Split tunnel list configuration is not available in the new UI. Management of split tunnel entries is currently only possible via &lt;code&gt;warp-cli tunnel ip&lt;/code&gt; and &lt;code&gt;warp-cli tunnel host&lt;/code&gt;. UI support will be added in a future release.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Tue, 26 May 2026 22:26:01 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Windows (version 2026.4.1390.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-warp-windows-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces the new Cloudflare One Client UI for Windows! You can expect a cleaner and more intuitive design as well as easier access to common actions and information. Here are some of the many things we have found our users appreciate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right click context menu to access the most common client actions quickly&lt;/li&gt;
&lt;li&gt;Built-in captive portal login experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Additional Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added a new CLI command: warp-cli mdm refresh. This command executes an immediate refresh of the Mobile Device Management (MDM) configuration file.&lt;/li&gt;
&lt;li&gt;Fixed a proxy mode connection stall issue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration authentication for devices via the integrated WebView2 browser is unavailable in this version as a temporary measure. As a result, the client will utilize the default browser on the device to complete the authentication process.&lt;/li&gt;
&lt;li&gt;An error indicating that Microsoft Edge can&amp;#39;t read and write to its data directory may be displayed during captive portal login; this error is benign and can be dismissed.&lt;/li&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;Split tunnel list configuration is not available in the new UI. Management of Split Tunnel entries is currently only possible via &lt;code&gt;warp-cli tunnel ip&lt;/code&gt; and &lt;code&gt;warp-cli tunnel host&lt;/code&gt;. UI support will be added in a future release.&lt;/li&gt;
&lt;li&gt;Windows ARM may prompt the user to close running applications while trying to install this version. Simply click “Ok” with the default highlighted option.&lt;/li&gt;
&lt;li&gt;DNS resolution may be broken when the following conditions are all true:&lt;ul&gt;
&lt;li&gt;The client is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while the client is connected.&lt;br&gt;To work around this issue, please reconnect the client by selecting &amp;quot;disconnect&amp;quot; and then &amp;quot;connect&amp;quot; in the client user interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Tue, 26 May 2026 22:26:00 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Linux (version 2026.4.1390.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-warp-linux-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces the new Cloudflare One Client UI for Linux! You can expect a cleaner and more intuitive design as well as easier access to common actions and information. Here are some of the many things we have found our users appreciate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right click context menu to access the most common client actions quickly&lt;/li&gt;
&lt;li&gt;Built-in captive portal login experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added a new CLI command: warp-cli mdm refresh. This command executes an immediate refresh of the Mobile Device Management (MDM) configuration file.&lt;/li&gt;
&lt;li&gt;Official support for RHEL 9 has been added for Cloudflare Mesh nodes. To install the RHEL 9 package, the Extra Packages for Enterprise Linux (EPEL) repository must be active, as it contains dependencies required for the tray icon and captive portal webview.&lt;/li&gt;
&lt;li&gt;Fixed a proxy mode connection stall issue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;Split tunnel list configuration is not available in the new UI. Management of split tunnel entries is currently only possible via &lt;code&gt;warp-cli tunnel ip&lt;/code&gt; and &lt;code&gt;warp-cli tunnel host&lt;/code&gt;. UI support will be added in a future release.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Tue, 26 May 2026 20:32:41 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cache - 不可缓存的响应现在将返回 BYPASS 状态</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-bypass-status-for-uncacheable-responses/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-bypass-status-for-uncacheable-responses/</guid><description>&lt;p&gt;只要响应不可缓存，Cloudflare 现在就会返回 &lt;code&gt;BYPASS&lt;/code&gt; &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cache/concepts/cache-responses/&quot;&gt;缓存状态&lt;/a&gt;，而不是像以前那样根据 Cloudflare 选择不缓存响应的原因而混合返回 &lt;code&gt;BYPASS&lt;/code&gt; 和 &lt;code&gt;MISS&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;Cloudflare 可能拒绝缓存响应有多种原因 —— 例如，响应超出了您计划的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cache/concepts/default-cache-behavior/#cacheable-size-limits&quot;&gt;最大可缓存文件大小&lt;/a&gt;、源站发送了 &lt;code&gt;Cache-Control: no-cache&lt;/code&gt;、&lt;code&gt;private&lt;/code&gt; 或 &lt;code&gt;max-age=0&lt;/code&gt;、响应包含 &lt;code&gt;Set-Cookie&lt;/code&gt; 标头，或者请求包含 &lt;code&gt;Authorization&lt;/code&gt; 标头。&lt;/p&gt;
&lt;p&gt;以前，只有其中一些情况会返回 &lt;code&gt;BYPASS&lt;/code&gt;。其他情况（例如响应超出最大可缓存文件大小）在每次请求时都会返回 &lt;code&gt;MISS&lt;/code&gt;，无论 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cache/concepts/cache-control/#origin-cache-control-behavior&quot;&gt;源站缓存控制（Origin Cache Control）&lt;/a&gt; 是开启还是关闭。因为该响应永远无法被缓存，所以每个随后的请求也会返回 &lt;code&gt;MISS&lt;/code&gt;，这看起来与损坏的缓存没有什么区别，很难区分 Cloudflare 是在尝试缓存资产但失败了，还是故意选择不缓存它。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;BYPASS&lt;/code&gt; 现在一致地表示 Cloudflare 拒绝缓存该响应，无论出于何种原因。&lt;code&gt;MISS&lt;/code&gt; 专门保留用于在请求时未在本地缓存中的可缓存响应。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;您的分析数据中将出现什么变化&quot;&gt;您的分析数据中将出现什么变化&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#您的分析数据中将出现什么变化&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;在此更改部署后，您应该会看到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MISS 率下降&lt;/strong&gt;：不可缓存的响应不再计为缓存未命中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BYPASS 率上升&lt;/strong&gt;：这些相同的响应现在报告为绕过（bypass）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缓存命中率上升&lt;/strong&gt;：命中率计算不再包含永远无法被缓存的不可缓存流量，从而为您提供更准确的缓存效果视图。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您的总请求量和源站流量没有变化 —— 只有缓存状态标签不同。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;浏览器缓存-ttl-行为得以保留&quot;&gt;浏览器缓存 TTL 行为得以保留&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#浏览器缓存-ttl-行为得以保留&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;缓存状态标签是唯一发生改变的内容 —— 针对任何给定的响应，浏览器缓存 TTL 的处理与以前完全相同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;历史上因为 Cloudflare 拒绝缓存而返回 &lt;code&gt;MISS&lt;/code&gt; 的响应（例如，超过最大可缓存文件大小的响应）现在返回 &lt;code&gt;BYPASS&lt;/code&gt;，但继续应用浏览器缓存 TTL —— 就像它们被标记为 &lt;code&gt;MISS&lt;/code&gt; 时一样。&lt;/li&gt;
&lt;li&gt;历史上返回 &lt;code&gt;BYPASS&lt;/code&gt; 并跳过浏览器缓存 TTL 的响应继续跳过浏览器缓存 TTL。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在两种情况下，应用浏览器缓存 TTL 的决定取决于 Cloudflare 不缓存响应的深层原因，而不是取决于新的 &lt;code&gt;BYPASS&lt;/code&gt; 标签。&lt;/p&gt;</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Flagship - Flagship 现已进入公开 Beta</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-public-beta/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-26-public-beta/</guid><description>
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/flagship/&quot;&gt;Flagship&lt;/a&gt;&lt;/strong&gt; 现已进入公开 Beta。无需出站 HTTP 调用，即可直接在 Cloudflare Workers 中评估功能标志，使用由 Workers KV 和 Durable Objects 支持的全球分布式标志配置。Flagship 支持类型化标志值、定向规则、百分比灰度发布、审计历史记录，以及兼容 OpenFeature 的 SDK。&lt;/p&gt;
&lt;p&gt;只需几行代码，即可在 Worker 中评估标志：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;js&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.js&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; showNewCheckout&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;FLAGS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;getBooleanValue&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;new-checkout&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			false&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(showNewCheckout &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;New checkout&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; :&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Standard checkout&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.ts&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Promise&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; showNewCheckout&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;FLAGS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;getBooleanValue&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;new-checkout&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			showNewCheckout &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;New checkout&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; :&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Standard checkout&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;satisfies&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ExportedHandler&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;立即在 Cloudflare 仪表板中开始创建标志。请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/flagship/get-started/&quot;&gt;Flagship 文档&lt;/a&gt; 以快速入门。&lt;/p&gt;</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><product>Flagship</product><category>Flagship</category></item><item><title>AI Gateway - 通过 AI Gateway 全新的 REST API 调用任何 AI 模型</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-21-rest-api/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-21-rest-api/</guid><description>&lt;p&gt;AI Gateway 现在开始使用 &lt;code&gt;api.cloudflare.com&lt;/code&gt; 上的 AI REST API。无论提供商是 OpenAI、Anthropic、Google 还是托管在 Workers AI 上，您都可以通过一个统一的 API 调用任何模型，并使用相同的端点和身份验证方式。共有四个端点可用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POST /ai/run&lt;/code&gt; — 适用于所有模型和模态的通用端点&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /ai/v1/chat/completions&lt;/code&gt; — 兼容 OpenAI SDK&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /ai/v1/responses&lt;/code&gt; — 兼容 OpenAI Responses API&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /ai/v1/messages&lt;/code&gt; — 兼容 Anthropic SDK&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/ai/v1/chat/completions&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;model&quot;: &quot;openai/gpt-5.5&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;What is Cloudflare?&quot;}]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  }&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;所有的 AI Gateway 功能（日志记录、缓存、速率限制和护栏）都会自动应用。第三方模型将通过&lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-gateway/features/unified-billing/&quot;&gt;统一计费（Unified Billing）&lt;/a&gt;进行计费，因此您无需管理单独的提供商 API 密钥。&lt;/p&gt;
&lt;p&gt;第三方模型请求将通过您账户的默认网关（Gateway）进行路由，该网关会在首次使用时自动创建。若要通过特定网关路由请求，请添加 &lt;code&gt;cf-aig-gateway-id&lt;/code&gt; 标头。&lt;/p&gt;
&lt;p&gt;如果您已经通过现有的 REST API 调用 Workers AI 模型，该路径（&lt;code&gt;/ai/run/@cf/{model}&lt;/code&gt;）将继续有效。若要通过 AI Gateway 调用 Workers AI 模型，请使用 &lt;code&gt;@cf/&lt;/code&gt; 模型前缀（例如，&lt;code&gt;@cf/moonshotai/kimi-k2.6&lt;/code&gt;）并包含 &lt;code&gt;cf-aig-gateway-id&lt;/code&gt; 标头来指定要路由到的网关。&lt;/p&gt;
&lt;p&gt;欲了解更多细节和示例，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/ai-gateway/usage/rest-api/&quot;&gt;REST API 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Billing - 具有新支付方式的现代化账单档案</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-21-modernised-billing-profile/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-21-modernised-billing-profile/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/billing/get-started/update-billing-info/&quot;&gt;账单档案&lt;/a&gt;现已拥有现代化 UI，在单一&lt;strong&gt;订阅&lt;/strong&gt;标签下统一了账单信息、支付方式管理和增强的订阅视图。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;变更内容&quot;&gt;变更内容&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#变更内容&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;订阅&lt;/strong&gt;标签将账单信息、支付方式管理和您的订阅整合在一处。支付管理和&lt;strong&gt;支付逾期余额&lt;/strong&gt;流程现在使用最新的结账流程作为产品购买流程，因此您可以使用 Apple Pay、Google Pay、Link 以及&lt;a href=&quot;https://cloudflaredoc.ubitools.com/billing/payment-methods/instant-bank-payments-link/&quot;&gt;通过 Link 即时银行付款&lt;/a&gt;，以及银行卡和 PayPal 进行支付。&lt;/p&gt;
&lt;p&gt;当发卡机构要求时，新银行卡需完成 3D Secure 身份验证——例如，欧盟依据 PSD2，印度依据 RBI 规定。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/2026-05-21-modernised-billing-profile.D6PysUnl_Z1dpUam.webp&quot; alt=&quot;具有订阅标签的现代化账单档案&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;909&quot; height=&quot;676&quot;&gt;
&lt;p&gt;有关详情，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/billing/&quot;&gt;账单首页&lt;/a&gt;文档。&lt;/p&gt;</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><product>Billing</product><category>Billing</category></item><item><title>Cloudflare Fundamentals, Cloudflare One, Cloudflare Tunnel for SASE, Cloudflare Tunnel, Cloudflare Mesh - Cloudflare Tunnel 和 Cloudflare Mesh 的细粒度权限</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-21-tunnel-mesh-granular-permissions/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-21-tunnel-mesh-granular-permissions/</guid><description>&lt;p&gt;您现在可以将 Cloudflare 权限范围限定为单个 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; 实例和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot;&gt;Cloudflare Mesh&lt;/a&gt; 节点。管理员可以委派对特定 Tunnel 或 Mesh 节点的访问权限，而无需授予对整个账户中私有网络的控制权。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新增功能&quot;&gt;新增功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新增功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;当您&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/manage-members/manage/&quot;&gt;添加成员&lt;/a&gt;或创建&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/manage-members/policies/&quot;&gt;权限策略&lt;/a&gt;时，资源选择器现在将 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; 实例和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot;&gt;Cloudflare Mesh&lt;/a&gt; 节点列为可限定范围的资源类型。您可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;向支持操作人员授予对单个 Cloudflare Tunnel 实例的只读角色，以进行日志流传输和诊断，而不会暴露其他 Tunnel 或允许破坏性操作。&lt;/li&gt;
&lt;li&gt;向应用程序团队授予对特定 Cloudflare Mesh 节点的写入角色，而无需让他们访问私有网络的其余部分。&lt;/li&gt;
&lt;li&gt;将单个策略的范围同时限定为一个或多个 Tunnel 以及 Mesh 节点。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;工作原理&quot;&gt;工作原理&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#工作原理&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;细粒度权限是与现有账户级别角色平行的层，它们不会取代后者。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;现现的账户级别角色继续有效。&lt;/strong&gt; 拥有 &lt;code&gt;Cloudflare Access&lt;/code&gt; 或 &lt;code&gt;Cloudflare Zero Trust&lt;/code&gt; 的成员将保留对账户中每个 Tunnel 和 Mesh 节点的写入访问权限。这确保了与现有自动化和令牌的向后兼容性。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;细粒度权限是累加的。&lt;/strong&gt; 对于针对特定 Tunnel 或 Mesh 节点的任何 API 请求，如果主体具有账户级别角色&lt;strong&gt;或&lt;/strong&gt;该资源的细粒度权限，则将授予访问权限。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;资源枚举是感知授权的。&lt;/strong&gt; 列表端点（&lt;code&gt;GET /accounts/{id}/cfd_tunnel&lt;/code&gt;，&lt;code&gt;GET /accounts/{id}/warp_connector&lt;/code&gt;）仅返回主体至少具有只读访问权限的资源。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;开始使用&quot;&gt;开始使用&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#开始使用&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;配置 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/tunnel/advanced/granular-permissions/&quot;&gt;Cloudflare Tunnel 的细粒度权限&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;配置 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/granular-permissions/&quot;&gt;Cloudflare One 中 Cloudflare Tunnel 和 Cloudflare Mesh 的细粒度权限&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;查看 Cloudflare 角色参考上的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/fundamentals/manage-members/roles/#resource-scoped-roles&quot;&gt;资源范围角色&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Cloudflare One</category><category>Cloudflare Tunnel for SASE</category><category>Cloudflare Tunnel</category><category>Cloudflare Mesh</category></item><item><title>Workers VPC - 从 Workers VPC 访问 Cloudflare WAN 目标</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-21-vpc-networks-cloudflare-wan/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-21-vpc-networks-cloudflare-wan/</guid><description>
&lt;p&gt;You can now use &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-vpc/configuration/vpc-networks/&quot;&gt;VPC 网络（VPC Network）&lt;/a&gt; 绑定（binding）与 &lt;code&gt;network_id: &quot;cf1:network&quot;&lt;/code&gt; 从 Workers 访问您的整个私有网络，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-mesh/&quot;&gt;Cloudflare Mesh&lt;/a&gt; 节点和客户端设备&lt;/li&gt;
&lt;li&gt;通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; 或 Cloudflare Mesh 宣告的子网路由和主机名路由&lt;/li&gt;
&lt;li&gt;通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/&quot;&gt;Cloudflare WAN&lt;/a&gt; 接入端（on-ramps）连接的目标 —— GRE、IPsec 和 CNI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着单个 VPC 网络绑定可以将 Worker 请求路由到私有服务，无论这些服务是如何连接到 Cloudflare 的：是通过来自云 VPC 的 Cloudflare Tunnel、私有子网上的 Mesh 节点，还是通过来自您的数据中心或分支机构站点的 Cloudflare WAN 接入端。&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;vpc_networks&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;binding&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;PRIVATE_NETWORK&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;network_id&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;cf1:network&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;remote&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;vpc_networks&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;binding = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;PRIVATE_NETWORK&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;network_id = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;cf1:network&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;remote = &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;在运行时，您传给 &lt;code&gt;fetch()&lt;/code&gt; 的 URL 决定了目标：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Reach a service behind a Cloudflare WAN IPsec on-ramp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;PRIVATE_NETWORK&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;http://10.50.0.100:8080/api&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;aside role=&quot;note&quot; aria-label=&quot;说明&quot; class=&quot;aside-card flex items-start gap-3 rounded-lg px-4 py-3 my-4&quot; style=&quot;--_c: var(--nb-info); --_t: var(--nb-info-muted);&quot; data-astro-cid-znle5jil&gt;&lt;span class=&quot;flex h-[1.375em] shrink-0 items-center&quot; aria-hidden=&quot;true&quot; data-astro-cid-znle5jil&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; class=&quot;h-[1em] w-[1em]&quot; data-astro-cid-znle5jil=&quot;true&quot; data-icon=&quot;ph:info&quot;&gt;&lt;symbol id=&quot;ai:ph:info&quot; viewBox=&quot;0 0 256 256&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m16-40a8 8 0 0 1-8 8a16 16 0 0 1-16-16v-40a8 8 0 0 1 0-16a16 16 0 0 1 16 16v40a8 8 0 0 1 8 8m-32-92a12 12 0 1 1 12 12a12 12 0 0 1-12-12&quot;/&gt;&lt;/symbol&gt;&lt;use href=&quot;#ai:ph:info&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;div class=&quot;flex min-w-0 flex-1 flex-col gap-0.5&quot; data-astro-cid-znle5jil&gt;&lt;p class=&quot;m-0 text-base leading-snug font-semibold&quot; data-astro-cid-znle5jil&gt;说明&lt;/p&gt;&lt;div class=&quot;aside-card-body text-sm leading-normal&quot; data-astro-cid-znle5jil&gt;&lt;p&gt;对于位于 Cloudflare WAN 接入端（GRE、IPsec 或 CNI）后面的目标，您的网络必须将 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips/&quot;&gt;Cloudflare 源 IP 范围&lt;/a&gt; 路由回该接入端，以便答复流量返回到 Cloudflare。如果没有此路由，有状态流将失败。这是标准 Cloudflare WAN 引导配置（onboarding）的一部分。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;有关配置选项，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-vpc/configuration/vpc-networks/&quot;&gt;VPC 网络（VPC Networks）&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><product>Workers VPC</product><category>Workers VPC</category></item><item><title>DNS - 新的 DNS 记录 UX 正在推出</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-20-new-dns-records-ux/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-20-new-dns-records-ux/</guid><description>&lt;p&gt;从今天开始，每个人都可以在 Cloudflare 仪表板中选择加入焕然一新的 DNS 记录页面。在接下来的几周内，这一新体验将首先成为 Free 计划用户的默认体验，随后是付费计划。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/new-dns-ux.Bfs_yXPa_VJoah.webp&quot; alt=&quot;新的 DNS 记录用户体验&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3706&quot; height=&quot;2070&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新增功能&quot;&gt;新增功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新增功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;更佳的表格体验&lt;/strong&gt;：可调整大小和隐藏的列、行固定、带有逻辑运算符 (AND/OR) 的高级筛选器、可配置的分页以及展开的输入字段（长值不再被截断）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一流的移动端体验&lt;/strong&gt;：响应式布局，配有触摸友好的卡片式 UI 以及适用于小屏幕的紧凑型控件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS 快速参考&lt;/strong&gt;：直接在产品中提供有关 DNS、代理状态和 TTL 的简短解释，帮助用户在不离开页面的情况下配置记录。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;现代前端&lt;/strong&gt;：重构到 Cloudflare 的新 UI 框架上，这提高了性能并为未来的改进奠定了基础。&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/new-dns-ux.DV6gCbme_2cImvu.webp&quot; alt=&quot;新的 DNS 记录用户体验&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;754&quot; height=&quot;572&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;推出计划&quot;&gt;推出计划&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#推出计划&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;日期可能会根据推出期间收到的反馈而有所变化。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;5 月 20 日 - 6 月 5 日&lt;/strong&gt;：逐步推出到 Free 计划，然后是 Pro 和 Business 计划。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 月 8 日 - 7 月 3 日&lt;/strong&gt;：逐步推出到 Enterprise 计划。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;分享您的反馈&quot;&gt;分享您的反馈&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#分享您的反馈&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;一旦为您的账户启用了新体验，请在 Cloudflare 仪表板中的 DNS 记录页面顶部寻找反馈链接，并告诉我们您的想法。您的意见将帮助我们确定下一轮改进的优先顺序。&lt;/p&gt;</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>Radar - Cloudflare Radar 上的内容类型分布和 API 流量占比</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-20-radar-content-type-and-api-traffic/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-20-radar-content-type-and-api-traffic/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; 现已在&lt;a href=&quot;https://radar.cloudflare.com/traffic&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;流量页&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;新增两张图表，提供对 HTTP 流量构成的深入洞察：内容类型分布图表和 API 流量占比图表。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;内容类型分布&quot;&gt;内容类型分布&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#内容类型分布&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;新的&lt;a href=&quot;https://radar.cloudflare.com/traffic#content-type&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;内容类型&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;图表展示 HTTP 响应内容类型的分布，按高层类别分组。流量类型选择器允许按人工、Bot 或全部流量进行筛选。现有的&lt;a href=&quot;https://radar.cloudflare.com/traffic#bot-vs-human&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;Bot 与人工对比&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;图表也新增了内容类型类别筛选器，允许用户查看特定内容类别的 Bot/人工流量拆分。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/content-type-distribution.Dz2q1n6W_26btAV.webp&quot; alt=&quot;Radar 流量页上内容类型分布图表截图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;878&quot;&gt;
&lt;p&gt;内容类型类别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTML&lt;/strong&gt; — 网页（&lt;code&gt;text/html&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Images&lt;/strong&gt; — 所有图片格式（&lt;code&gt;image/*&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON&lt;/strong&gt; — JSON 数据和 API 响应（&lt;code&gt;application/json&lt;/code&gt;、&lt;code&gt;*+json&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript&lt;/strong&gt; — 脚本（&lt;code&gt;application/javascript&lt;/code&gt;、&lt;code&gt;text/javascript&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS&lt;/strong&gt; — 样式表（&lt;code&gt;text/css&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plain Text（纯文本）&lt;/strong&gt; — 非格式化文本（&lt;code&gt;text/plain&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fonts&lt;/strong&gt; — Web 字体（&lt;code&gt;font/*&lt;/code&gt;、&lt;code&gt;application/font-*&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XML&lt;/strong&gt; — XML 文档和订阅源（&lt;code&gt;text/xml&lt;/code&gt;、&lt;code&gt;application/xml&lt;/code&gt;、&lt;code&gt;application/rss+xml&lt;/code&gt;、&lt;code&gt;application/atom+xml&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YAML&lt;/strong&gt; — 配置文件（&lt;code&gt;text/yaml&lt;/code&gt;、&lt;code&gt;application/yaml&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Video&lt;/strong&gt; — 视频内容和流媒体（&lt;code&gt;video/*&lt;/code&gt;、&lt;code&gt;application/ogg&lt;/code&gt;、&lt;code&gt;*mpegurl&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio&lt;/strong&gt; — 音频内容（&lt;code&gt;audio/*&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown&lt;/strong&gt; — Markdown 文档（&lt;code&gt;text/markdown&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documents&lt;/strong&gt; — PDF、Office 文档、ePub、CSV（&lt;code&gt;application/pdf&lt;/code&gt;、&lt;code&gt;application/msword&lt;/code&gt;、&lt;code&gt;text/csv&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Binary&lt;/strong&gt; — 可执行文件、压缩包、WebAssembly（&lt;code&gt;application/octet-stream&lt;/code&gt;、&lt;code&gt;application/zip&lt;/code&gt;、&lt;code&gt;application/wasm&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serialization&lt;/strong&gt; — 二进制 API 格式（&lt;code&gt;application/protobuf&lt;/code&gt;、&lt;code&gt;application/grpc&lt;/code&gt;、&lt;code&gt;application/msgpack&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Other&lt;/strong&gt; — 所有其他内容类型&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;CONTENT_TYPE&lt;/code&gt; 维度和 &lt;code&gt;contentType&lt;/code&gt; 筛选器可用于 HTTP &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/radar/subresources/http/methods/summary_v2/&quot;&gt;summary&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/radar/subresources/http/methods/timeseries_groups_v2/&quot;&gt;timeseries groups&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/radar/subresources/http/methods/timeseries/&quot;&gt;timeseries&lt;/a&gt; 端点。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;api-流量占比&quot;&gt;API 流量占比&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#api-流量占比&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;新的 &lt;a href=&quot;https://radar.cloudflare.com/traffic#api-traffic&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;API 流量&lt;/strong&gt;&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;图表显示动态（不可缓存）HTTP 请求流量中 API 相关流量的百分比。API 流量通过返回 200 状态码的 HTTP 请求的 JSON 或 XML 响应内容类型（&lt;code&gt;application/json&lt;/code&gt;、&lt;code&gt;application/xml&lt;/code&gt;、&lt;code&gt;text/xml&lt;/code&gt;）来识别。流量类型选择器允许在人工流量、Bot 流量或全部流量之间切换。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/api-traffic-share._xl0TThn_Jb1Ti.webp&quot; alt=&quot;Radar 流量页上 API 流量占比图表截图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1006&quot;&gt;
&lt;p&gt;&lt;code&gt;API_TRAFFIC&lt;/code&gt; 维度可用于现有的 HTTP &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/radar/subresources/http/methods/summary_v2/&quot;&gt;summary&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/radar/subresources/http/methods/timeseries_groups_v2/&quot;&gt;timeseries groups&lt;/a&gt; 端点。&lt;code&gt;apiTraffic&lt;/code&gt; 筛选器（&lt;code&gt;API&lt;/code&gt; 或 &lt;code&gt;NON_API&lt;/code&gt;）也可应用于 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/api/resources/radar/subresources/http/methods/timeseries/&quot;&gt;HTTP timeseries&lt;/a&gt; 请求，以获取仅 API 或非 API 流量的原始请求数量。&lt;/p&gt;
&lt;p&gt;访问 &lt;a href=&quot;https://radar.cloudflare.com/traffic&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Radar 流量页&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;探索这些新图表。&lt;/p&gt;</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>WAF - WAF 发布 - 2026-05-20</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-20-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-20-waf-release/</guid><description>
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;已部署现有规则增强功能，以提高针对广泛 Web 攻击的检测弹性，并加强行为覆盖范围。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;持续规则改进&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们正在不断完善托管规则，以提供更具弹性的防护，并对攻击模式进行更深入的洞察。为了确保最佳的安全态势，我们建议持续监控安全事件（Security Events）仪表板，并在部署这些增强功能时调整规则操作。&lt;/p&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;bcdcec3ea63a480896513dc39e9c068d&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...9e9c068d&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Sitecore - Cache Poisoning - CVE:CVE-2025-53693 Beta&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;此规则已合并到原始规则 &quot;Sitecore - Cache Poisoning - CVE:CVE-2025-53693&quot;（ID： &lt;rule-id id=&quot;d1bd7563e6254db48ce703807c5b669c&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...7c5b669c&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;）中。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Access - Cloudflare 作为身份提供商和账户成员资格选择器</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-19-cloudflare-as-identity-provider/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-19-cloudflare-as-identity-provider/</guid><description>&lt;p&gt;Cloudflare Access 现在支持将 Cloudflare 本身用作&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/identity-providers/cloudflare/&quot;&gt;身份提供商&lt;/a&gt;。如果您发布了 Access 应用程序并选择 Cloudflare 作为登录方法，用户可以使用其现有的 Cloudflare 账户登录——无需一次性 PIN，无需第三方 IdP 配置，也无需共享电子邮件收件箱。身份验证由 Cloudflare 自身的账户安全性（包括多因素身份验证）提供支持，因此在大多数用例中，它比基于 OTP 的登录更易于设置且更安全。&lt;/p&gt;
&lt;p&gt;Cloudflare 现在是&lt;strong&gt;所有新创建的 Zero Trust 账户的默认身份提供商&lt;/strong&gt;，取代了一次性 PIN（One-time PIN）。&lt;/p&gt;
&lt;p&gt;这还启用了两个新功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare 账户成员选择器（Cloudflare Account Member selector）&lt;/strong&gt; — 一种新的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/policies/#cloudflare-access-selectors&quot;&gt;策略选择器&lt;/a&gt;，根据用户在 Cloudflare 账户中的成员资格来进行匹配。您可以针对当前账户，也可以为跨账户访问场景指定不同的账户 ID。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restrict to account members（限制为账户成员）&lt;/strong&gt; — 一种身份提供商配置选项，将身份验证限制为属于您 Cloudflare 账户成员的用户。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要开始使用，请在您的 Zero Trust 设置中将 Cloudflare 添加为&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/identity-providers/cloudflare/&quot;&gt;身份提供商&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Artifacts, Queues - 针对 Artifacts 生命周期事件的事件订阅</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-19-event-subscriptions/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-19-event-subscriptions/</guid><description>&lt;p&gt;您现在可以接收针对 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/artifacts/&quot;&gt;Artifacts&lt;/a&gt; 仓库更改的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/queues/event-subscriptions/&quot;&gt;事件通知&lt;/a&gt;，并在 Worker 中使用它们来构建提交驱动的自动化。&lt;/p&gt;
&lt;p&gt;这允许您：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在创建或导入仓库时运行自定义工作流。&lt;/li&gt;
&lt;li&gt;在代理（agent）向仓库推送代码时启动构建并部署更改。&lt;/li&gt;
&lt;li&gt;在每次推送时触发评审代理。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可用事件包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;账户级别事件&lt;/strong&gt;（&lt;code&gt;artifacts&lt;/code&gt; 源）— &lt;code&gt;repo.created&lt;/code&gt;、&lt;code&gt;repo.deleted&lt;/code&gt;、&lt;code&gt;repo.forked&lt;/code&gt;、&lt;code&gt;repo.imported&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;仓库级别事件&lt;/strong&gt;（&lt;code&gt;artifacts.repo&lt;/code&gt; 源）— &lt;code&gt;pushed&lt;/code&gt;、&lt;code&gt;cloned&lt;/code&gt;、&lt;code&gt;fetched&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/artifacts/guides/event-subscriptions/&quot;&gt;Artifacts 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><product>Artifacts</product><category>Artifacts</category><category>Queues</category></item><item><title>CASB - CASB 新增对 Claude Compliance API 的支持</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-19-casb-claude-compliance-api/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-19-casb-claude-compliance-api/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/cloud-and-saas/anthropic/&quot;&gt;Cloudflare CASB&lt;/a&gt; 现已与 &lt;a href=&quot;https://support.claude.com/en/articles/13015708-access-the-compliance-api&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Claude Compliance API&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 集成。此增强功能为安全团队提供了对其组织内 Claude 使用模式、管理员活动和合规相关事件的可见性。&lt;/p&gt;
&lt;p&gt;Claude Compliance API 提供对 Claude Enterprise 和 Claude Platform 内审计日志及管理操作的结构化访问。Cloudflare CASB 摄取这些数据，以呈现帮助组织增强安全态势并执行 AI 治理的安全发现结果。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;主要功能&quot;&gt;主要功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#主要功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;从今日起，安全团队可以扫描以下资产的安全发现结果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;公开项目&lt;/strong&gt; — 设置为公开可见性的项目&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;项目附件&lt;/strong&gt; — 添加到项目中违反 DLP 策略的文件和文档&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;聊天文件&lt;/strong&gt; — 违反 DLP 策略的用户上传和提供商生成的文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;聊天消息&lt;/strong&gt; — 违反 DLP 策略的用户提示和提供商响应&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Artifacts&lt;/strong&gt; — 违反 DLP 策略的提供商生成的文档和文件&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;了解更多&quot;&gt;了解更多&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#了解更多&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;此&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/cloud-and-saas/anthropic/&quot;&gt;集成&lt;/a&gt;向所有 Cloudflare One 客户开放。新 Cloudflare 客户可以注册并免费开始使用前两个集成。现有客户可直接在仪表板中启用集成。集成在启用后立即开始扫描，并在几分钟内在仪表板中呈现发现结果。&lt;/p&gt;</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><product>CASB</product><category>CASB</category></item><item><title>Radar - Cloudflare Radar 上的 MRT Explorer</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-19-radar-mrt-explorer/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-19-radar-mrt-explorer/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; 现已在路由（Routing）部分新增 &lt;a href=&quot;https://radar.cloudflare.com/routing/mrt-explorer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MRT Explorer&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 工具。RIPE RIS 和 RouteViews 等路由收集器会发布包含 BGP 通告、撤销及路由属性的 MRT（Multi-Threaded Routing Toolkit）转储文件。新工具可完全在浏览器中解析这些文件——数据不会被上传。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;加载文件&quot;&gt;加载文件&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#加载文件&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;粘贴 URL 以远程获取 MRT 文件，将文件拖放到页面上，或浏览本地文件。支持 gzip 和 bzip2 压缩文件。还提供示例文件以便快速上手。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/mrt-explorer-form.DKnzUqMC_eLAcj.webp&quot; alt=&quot;MRT Explorer 文件输入表单截图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2428&quot; height=&quot;898&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;检查事件&quot;&gt;检查事件&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#检查事件&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;解析完成后，工具会列出每个 BGP 事件，包括时间戳、前缀、AS 路径、OTC（Only to Customer）和社区属性。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/mrt-explorer-list.8fq2u5Kc_16oUq3.webp&quot; alt=&quot;MRT Explorer 事件列表截图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2410&quot; height=&quot;1536&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;事件详情&quot;&gt;事件详情&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#事件详情&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;点击&quot;查看详情&quot;操作会弹出模态框，显示更多属性和完整的事件 JSON。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/mrt-explorer-details.EMcHevWw_Z2ctmxN.webp&quot; alt=&quot;MRT Explorer 事件详情模态框截图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1694&quot; height=&quot;1890&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;可分享-url&quot;&gt;可分享 URL&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#可分享-url&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;通过 URL 加载文件时，查询字符串会保存来源，以便直接分享链接——接收者的浏览器会立即获取并解析同一文件。&lt;/p&gt;
&lt;p&gt;试用 &lt;a href=&quot;https://radar.cloudflare.com/routing/mrt-explorer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Radar 上的 MRT Explorer&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Artifacts - 使用 Wrangler CLI 管理 Artifacts 命名空间和仓库</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-18-wrangler-support/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-18-wrangler-support/</guid><description>&lt;p&gt;您现在可以直接从 Wrangler CLI 管理 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/artifacts/&quot;&gt;Artifacts&lt;/a&gt; 命名空间、仓库以及仓库范围的令牌。&lt;/p&gt;
&lt;p&gt;可用命令：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wrangler artifacts namespaces list&lt;/code&gt; — 列出您账户中的 Artifacts 命名空间。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler artifacts namespaces get&lt;/code&gt; — 获取命名空间的元数据。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler artifacts repos create&lt;/code&gt; — 在命名空间中创建仓库。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler artifacts repos list&lt;/code&gt; — 列出命名空间中的仓库。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler artifacts repos get&lt;/code&gt; — 获取仓库的元数据。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler artifacts repos delete&lt;/code&gt; — 删除仓库。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler artifacts repos issue-token&lt;/code&gt; — 签发用于 Git 访问的仓库范围令牌。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要开始使用，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/commands/artifacts/&quot;&gt;Wrangler Artifacts 命令文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><product>Artifacts</product><category>Artifacts</category></item><item><title>Cloudflare WAN, Magic Transit - Unified Routing 支持 Network Analytics</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-18-unified-routing-network-analytics/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-18-unified-routing-network-analytics/</guid><description>&lt;p&gt;使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/reference/traffic-steering/#unified-routing-mode-beta&quot;&gt;Unified Routing&lt;/a&gt; 模式的账户现在已完全支持 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/analytics/network-analytics/&quot;&gt;Network Analytics&lt;/a&gt;。通过 Unified Routing onramp 和 offramp 的流量现在可以在 Network Analytics 中可见，其维度和过滤器与标准数据平面上的流量相同。&lt;/p&gt;
&lt;p&gt;这弥补了已将隧道迁移到 Unified Routing 但在 Network Analytics 仪表板中失去对其数据平面流量可视性的客户的功能差距。无需更改配置——所有启用了 Unified Routing 的账户都会自动收集分析数据。&lt;/p&gt;
&lt;p&gt;有关其余的 Beta 限制，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/reference/traffic-steering/#beta-limitations&quot;&gt;流量引导 Beta 限制&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category><category>Magic Transit</category></item><item><title>Workers - 在 Wrangler 和 Vite 中通过 Cloudflare Tunnel 共享本地开发服务器</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-18-local-dev-tunnels/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-18-local-dev-tunnels/</guid><description>&lt;p&gt;现在，当使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt; 或 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/vite-plugin/&quot;&gt;Cloudflare Vite 插件&lt;/a&gt;时，您可以通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; 共享本地开发会话并获得一个公共 URL。当您需要共享预览、测试 Webhook 或从其他设备访问您的应用程序时，这非常有用。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/vite-local-dev-tunnel.CW4xpgIR_ZmyQ8a.webp&quot; alt=&quot;Vite 本地开发隧道演示&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1000&quot; height=&quot;678&quot;&gt;
&lt;p&gt;这使您可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用随机的 &lt;code&gt;*.trycloudflare.com&lt;/code&gt; 主机名启动一个临时的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/tunnel/setup/#quick-tunnels-development&quot;&gt;快捷隧道（Quick tunnel）&lt;/a&gt;，或者&lt;/li&gt;
&lt;li&gt;使用现有的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/tunnel/setup/#create-a-tunnel&quot;&gt;命名隧道（named tunnel）&lt;/a&gt;以获得稳定的主机名，并使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/&quot;&gt;Cloudflare Access&lt;/a&gt; 限制访问。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要启动隧道，请在开发服务器运行时在 Wrangler 中按 &lt;code&gt;t&lt;/code&gt; 或在 Vite 中按 &lt;code&gt;t + Enter&lt;/code&gt;。有关设置命名隧道的详细信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/local-development/local-dev-tunnels/&quot;&gt;共享本地开发服务器&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Hyperdrive, Workers - Hyperdrive 开放数据库连接池大小指标</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-15-hyperdrive-pool-size-metrics/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-15-hyperdrive-pool-size-metrics/</guid><description>&lt;p&gt;您现在可以查看 Hyperdrive 数据库连接池的大小，从而使您能够自诊断连接问题。使用 Cloudflare 仪表板或 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/analytics/graphql-api/getting-started/&quot;&gt;GraphQL Analytics API&lt;/a&gt; 中的 &lt;code&gt;hyperdrivePoolSizesAdaptiveGroups&lt;/code&gt; 数据集，您可以查看每个配置的 &lt;code&gt;waitingClients&lt;/code&gt;、&lt;code&gt;currentPoolSize&lt;/code&gt;、&lt;code&gt;availablePoolSlots&lt;/code&gt; 和 &lt;code&gt;maxPoolSize&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dash.cloudflare.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare 仪表板&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;中每个 Hyperdrive 配置的 **Metrics（指标）**选项卡中添加了一个新的 **Pool connections（连接池连接）**图表。您可以使用位置选择器，按机场代码钻取托管连接池的特定位置。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/hyperdrive-pool-size-metrics-chart.DZxLTFgB_3zcIK.webp&quot; alt=&quot;Hyperdrive 池大小指标图表&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2604&quot; height=&quot;890&quot;&gt;
&lt;p&gt;该图表显示：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Waiting clients（等待中的客户端）&lt;/strong&gt;：等待可用连接的客户端请求。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open connections（打开的连接）&lt;/strong&gt;：到您数据库的活动连接。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pool size maximum（最大连接池大小）&lt;/strong&gt;：您配置的源站连接限制。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;连接争用表现为等待中的客户端激增，或者当打开的连接持续接近最大连接池大小时。如果您的打开连接经常接近此限制，请考虑联系 Cloudflare 以&lt;a href=&quot;https://cloudflaredoc.ubitools.com/hyperdrive/platform/limits/#request-a-limit-increase&quot;&gt;提高您的 Hyperdrive 连接限制&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;连接池大小指标&quot;&gt;连接池大小指标&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#连接池大小指标&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/analytics/graphql-api/getting-started/&quot;&gt;GraphQL Analytics API&lt;/a&gt; 中的 &lt;code&gt;hyperdrivePoolSizesAdaptiveGroups&lt;/code&gt; 数据集为每个 Hyperdrive 配置公开了以下关键连接池指标：&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;avg&lt;/code&gt; 下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;currentPoolSize&lt;/code&gt;&lt;/strong&gt; — 当前在池中打开的平均连接数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;availablePoolSlots&lt;/code&gt;&lt;/strong&gt; — 可供检出的平均连接池连接数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;waitingClients&lt;/code&gt;&lt;/strong&gt; — 等待池中连接的平均客户端数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 &lt;code&gt;max&lt;/code&gt; 下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;maxPoolSize&lt;/code&gt;&lt;/strong&gt; — 配置的连接池最大大小。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;currentPoolSize&lt;/code&gt;&lt;/strong&gt; — 池中打开的峰值连接数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;waitingClients&lt;/code&gt;&lt;/strong&gt; — 等待池中连接的峰值客户端数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/hyperdrive/observability/metrics/&quot;&gt;Metrics and analytics&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/hyperdrive/concepts/connection-pooling/&quot;&gt;Connection pooling&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category><category>Workers</category></item><item><title>R2 SQL - R2 SQL 现在支持 JOIN、子查询和多表查询</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-14-joins-subqueries-multi-table-queries/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-14-joins-subqueries-multi-table-queries/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt; 是 Cloudflare 的无服务器分布式 SQL 引擎，用于查询存储在 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 中的 &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 表。R2 SQL 直接在 Cloudflare 的全球网络上运行，无需管理任何基础设施，因此您可以分析 R2 中的数据，而无需将其导出到外部仓库。&lt;/p&gt;
&lt;p&gt;R2 SQL 现在支持在单个查询中连接多个 Iceberg 表。您可以使用 JOIN 组合表，使用子查询进行过滤，并定义多表 CTE 以构建复杂的分析查询。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新功能&quot;&gt;新功能&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新功能&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JOIN&lt;/strong&gt; — &lt;code&gt;INNER JOIN&lt;/code&gt;、&lt;code&gt;LEFT JOIN&lt;/code&gt;、&lt;code&gt;RIGHT JOIN&lt;/code&gt;、&lt;code&gt;FULL OUTER JOIN&lt;/code&gt;、&lt;code&gt;CROSS JOIN&lt;/code&gt; 以及隐式连接（&lt;code&gt;FROM&lt;/code&gt; 中以逗号分隔，且条件在 &lt;code&gt;WHERE&lt;/code&gt; 中）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;子查询&lt;/strong&gt; — &lt;code&gt;IN&lt;/code&gt; / &lt;code&gt;NOT IN&lt;/code&gt;、&lt;code&gt;EXISTS&lt;/code&gt; / &lt;code&gt;NOT EXISTS&lt;/code&gt;、&lt;code&gt;SELECT&lt;/code&gt; / &lt;code&gt;WHERE&lt;/code&gt; / &lt;code&gt;HAVING&lt;/code&gt; 中的标量子查询，以及派生表（&lt;code&gt;FROM&lt;/code&gt; 中的子查询）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多表 CTE&lt;/strong&gt; — &lt;code&gt;WITH&lt;/code&gt; 子句可以引用不同的表并包含 JOIN&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自连接&lt;/strong&gt; — 使用不同的别名将表与自身连接&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多路连接&lt;/strong&gt; — 在单个查询中连接三个或更多表&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;示例&quot;&gt;示例&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#示例&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;带有聚合的双表-join&quot;&gt;带有聚合的双表 JOIN&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#带有聚合的双表-join&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;domain&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;plan&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; request_count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zones&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; z&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;INNER JOIN&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;http_requests&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; h &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ON&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; h&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;plan&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;enterprise&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;domain&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;plan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; request_count &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 20&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;exists-子查询&quot;&gt;&lt;code&gt;EXISTS&lt;/code&gt; 子查询&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#exists-子查询&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;domain&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;plan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zones&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; z&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; EXISTS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;firewall_events&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; f&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; f&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; AND&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; f&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;block&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; z&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 20&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;带有-join-的多表-cte&quot;&gt;带有 JOIN 的多表 CTE&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#带有-join-的多表-cte&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot; data-nb-lang=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;WITH&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; top_zones &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; req_count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;http_requests&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; req_count &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;DESC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 50&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;zone_threats &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COUNT&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; threat_count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; my_namespace&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;firewall_events&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    WHERE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; risk_score &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;    GROUP BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tz&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;tz&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;req_count&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;COALESCE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zt&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;threat_count&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;AS&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; threat_count&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; top_zones tz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LEFT JOIN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; zone_threats zt &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ON&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tz&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; zt&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;zone_id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;ORDER BY&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; tz&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;req_count&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; DESC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;LIMIT&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 20&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;有关完整语法参考，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/sql-reference/&quot;&gt;SQL 参考&lt;/a&gt;。有关连接性能指南，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/reference/limitations-best-practices/&quot;&gt;限制与最佳实践&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><product>R2 SQL</product><category>R2 SQL</category></item><item><title>WAF - WAF 发布 - 2026-05-15 - 紧急</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-15-emergency-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-15-emergency-waf-release/</guid><description>
&lt;p&gt;此紧急发布引入了两条新规则，以检测针对 rewrite 模块的 &lt;code&gt;is_args&lt;/code&gt; 陈旧状态漏洞（CVE-2026-42945）的 nginx 堆缓冲区溢出和堆喷射利用尝试。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CVE-2026-42945: nginx 中通过 Rewrite 模块中陈旧的 &lt;code&gt;is_args&lt;/code&gt; 导致的堆缓冲区溢出&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;成功利用该漏洞允许远程攻击者通过发送包含可转义字符的精心设计的 URI，触发 nginx 的 rewrite 模块中的堆缓冲区溢出。&lt;code&gt;ngx_http_script_copy_capture_code()&lt;/code&gt; 中的长度/复制阶段不匹配导致复制阶段将转义数据写入过小的缓冲区，从而导致堆损坏。这会导致拒绝服务（工作进程崩溃），并结合堆风水技术，可能实现远程代码执行。&lt;/p&gt;
&lt;p&gt;我们强烈建议立即升级到 nginx 1.30.1（或更高版本），以解决底层漏洞。如果无法立即升级，请避免在替换字符串中带有 &lt;code&gt;?&lt;/code&gt; 的 &lt;code&gt;rewrite&lt;/code&gt; 指令，后跟引用捕获组的 &lt;code&gt;set&lt;/code&gt; 或 &lt;code&gt;if&lt;/code&gt;。&lt;/p&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;2013e3e58efe4b79a26e214f7e52be73&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...7e52be73&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;nginx - Remote Code Execution - Buffer Overread - CVE:CVE-2026-42945&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;68226e83a4d14ee9a9c878469df0ee6c&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...9df0ee6c&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;nginx - Remote Code Execution - Heap Spray - CVE:CVE-2026-42945&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Workers 仪表板中新增的域名（Domains）选项卡</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-14-domains-tab/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-14-domains-tab/</guid><description>
&lt;p&gt;在您的 Worker 仪表板中，现在有一个专用的 &lt;strong&gt;Domains（域名）&lt;/strong&gt; 选项卡，您可以在其中通过 Cloudflare Registrar 购买新域名并使其自动连接，添加&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/configuration/routing/custom-domains/&quot;&gt;现有域名&lt;/a&gt;，并在一个地方管理所有 Worker 的路由。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/domains-tab.Cey2Oyr-_B4kIf.webp&quot; alt=&quot;Workers 仪表板中新增的域名（Domains）选项卡&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1678&quot; height=&quot;1026&quot;&gt;
&lt;p&gt;您还可以启用或禁用您的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/configuration/routing/workers-dev/&quot;&gt;&lt;code&gt;workers.dev&lt;/code&gt; 子域名&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/versions-and-deployments/preview-urls/&quot;&gt;预览 URL (Preview URLs)&lt;/a&gt;，将它们置于 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/access-controls/&quot;&gt;Cloudflare Access&lt;/a&gt; 保护之下以要求登录，并直接跳转到任何已连接域名的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/analytics/&quot;&gt;分析&lt;/a&gt; 或域名概览。&lt;/p&gt;
&lt;p&gt;要开始使用，请转到 &lt;strong&gt;Workers &amp;amp; Pages&lt;/strong&gt;，选择一个 Worker，然后打开 &lt;strong&gt;Domains（域名）&lt;/strong&gt; 选项卡。&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages&quot; data-nb-button class=&quot;group inline-flex w-max shrink-0 items-center justify-center rounded-full font-medium whitespace-nowrap no-underline shadow-xs transition-colors cursor-pointer select-none focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary-hover h-9 gap-1.5 px-3 text-sm&quot; target=&quot;_blank&quot;&gt;Go to &lt;strong&gt;Workers &amp;amp; Pages&lt;/strong&gt;&amp;nbsp;&amp;#8599;&lt;/a&gt;</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Agents, Workers - Agents SDK v0.12.4：对话恢复、路由重试、持久化 Think 提交及 Voice 连接控制</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-13-agents-sdk-v0.12.4/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-13-agents-sdk-v0.12.4/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Agents SDK&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; 的最新版本带来了更可靠的对话恢复、修复了重连时的 Agent 状态同步、添加了 Think 的持久化提交、暴露了路由重试配置，并为 Voice agents 添加了连接控制。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;对话恢复改进&quot;&gt;对话恢复改进&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#对话恢复改进&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; 现在在浏览器或客户端流中断时保持服务端 turn 继续运行。这对于长时间运行的 AI 响应场景非常有用，例如用户刷新页面、关闭标签页或临时断线。调用 &lt;code&gt;stop()&lt;/code&gt; 仍会取消服务端 turn。&lt;/p&gt;
&lt;p&gt;如果浏览器或客户端中止也应取消服务端 turn，请设置 &lt;code&gt;cancelOnClientAbort: true&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; chat&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; useAgentChat&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	agent: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;assistant&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;user-123&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	cancelOnClientAbort: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;tsx&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;tsx&quot; data-nb-lang=&quot;tsx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; chat&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; useAgentChat&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	agent: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;assistant&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;user-123&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	cancelOnClientAbort: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;主要 bug 修复：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对话流恢复协商不再在 replay 与关闭的 WebSocket 连接竞争时抛出异常。&lt;/li&gt;
&lt;li&gt;恢复的对话续传不再在原始 socket 在终端响应前断开时，导致 &lt;code&gt;useAgentChat&lt;/code&gt; 卡在流式传输状态。&lt;/li&gt;
&lt;li&gt;审批自动续传保留推理部分，并在最终消息中持久化续传推理。&lt;/li&gt;
&lt;li&gt;当恢复的流从备用观察路径切换到传输拥有的流时，&lt;code&gt;isServerStreaming&lt;/code&gt; 现在能正确重置。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;agent-状态和路由修复&quot;&gt;Agent 状态和路由修复&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#agent-状态和路由修复&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;agents@0.12.4&lt;/code&gt; 防止在 WebSocket 连接设置期间出现重复的初始状态帧。这避免了过时的初始状态消息覆盖客户端已发送的状态更新。&lt;/p&gt;
&lt;p&gt;当工具调用跨越 Durable Object 重启时，Agent 恢复也更加可靠。恢复现在会将用户完成钩子推迟到 agent 启动后，并隔离钩子失败，因此一个失败的钩子不会阻止其他恢复的运行完成。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;getAgentByName()&lt;/code&gt; 现在支持 &lt;code&gt;routingRetry&lt;/code&gt;，用于处理瞬态 Durable Object 路由失败：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { getAgentByName } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;agents&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; agent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; getAgentByName&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(env.AssistantAgent, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;user-123&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	routingRetry: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		maxAttempts: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { getAgentByName } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;agents&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; agent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; getAgentByName&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(env.AssistantAgent, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;user-123&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	routingRetry: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		maxAttempts: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;持久化-think-提交&quot;&gt;持久化 Think 提交&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#持久化-think-提交&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;@cloudflare/think&lt;/code&gt; 现在支持持久化的程序化提交。&lt;code&gt;submitMessages()&lt;/code&gt; 提供持久化接受、幂等重试、状态检查、取消和清理功能，适用于应在调用方返回后继续运行的服务器驱动 turn。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Think.chat()&lt;/code&gt; RPC turn 现在在对话恢复 fiber 内运行并持久化其流式数据块。中断的子 agent turn 可以恢复部分输出，而不必从头开始。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ChatOptions.tools&lt;/code&gt; 已从 TypeScript API 中移除。请在子 agent 上定义持久化工具，或使用 agent 工具进行编排。遗留调用者传入的运行时 &lt;code&gt;options.tools&lt;/code&gt; 值将被忽略并产生警告。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;think-消息裁剪行为变更&quot;&gt;Think 消息裁剪行为变更&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#think-消息裁剪行为变更&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;@cloudflare/think&lt;/code&gt; 默认不再对模型上下文应用 &lt;code&gt;pruneMessages({ toolCalls: &quot;before-last-2-messages&quot; })&lt;/code&gt;。以前的默认行为可能会从较长的多轮流程中剥离客户端工具结果。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;truncateOlderMessages&lt;/code&gt; 仍照常运行，因此上下文成本保持有界。依赖旧的激进裁剪行为的子类可以从 &lt;code&gt;beforeTurn&lt;/code&gt; 重新启用：&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { pruneMessages } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;ai&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; MyAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	beforeTurn&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			messages: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;pruneMessages&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				messages: ctx.messages,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				toolCalls: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;before-last-2-messages&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			}),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { Think } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;@cloudflare/think&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { pruneMessages } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;ai&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; MyAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; extends&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Think&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;	beforeTurn&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			messages: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;pruneMessages&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				messages: ctx.messages,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				toolCalls: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;before-last-2-messages&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			}),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;voice-agent-连接控制&quot;&gt;Voice agent 连接控制&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#voice-agent-连接控制&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;@cloudflare/voice&lt;/code&gt; 为 &lt;code&gt;useVoiceAgent&lt;/code&gt; 添加了 &lt;code&gt;enabled&lt;/code&gt; 选项。React 应用现在可以延迟创建和连接 &lt;code&gt;VoiceClient&lt;/code&gt;，直到所需条件（如能力令牌）就绪。&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;js&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; voice&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; useVoiceAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	agent: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MyVoiceAgent&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	enabled: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(token),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;tsx&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;tsx&quot; data-nb-lang=&quot;tsx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; voice&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; useVoiceAgent&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	agent: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;MyVoiceAgent&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	enabled: &lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(token),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;此版本还修复了 Workers AI 语音转文字会话的边界情况，以及 AI SDK &lt;code&gt;textStream&lt;/code&gt; 响应中 &lt;code&gt;withVoice&lt;/code&gt; 文本流的问题。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;其他改进&quot;&gt;其他改进&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#其他改进&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Streamable HTTP 路由&lt;/strong&gt; — 当没有独立 SSE 流可用时，服务器到客户端的请求现在通过原始 POST 流路由。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;结构化工具输出&lt;/strong&gt; — 裁剪旧消息或超大持久化行时会保留工具输出的形状。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;非对话 Think 工具步骤&lt;/strong&gt; — Think agent 工具子项可在不发出助手文本的情况下完成，并可通过 &lt;code&gt;getAgentToolOutput&lt;/code&gt; 返回结构化输出。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;子 agent 调度&lt;/strong&gt; — 当拥有 facet 注册条目不再存在时，过时的子 agent 调度行会被清理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;@cloudflare/codemode&lt;/code&gt;&lt;/strong&gt; — 添加了带有 iframe sandbox 执行器的浏览器安全导出，并在 sandbox 内解析 OpenAPI 规范以避免 Worker Loader RPC 大小限制。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;升级&quot;&gt;升级&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#升级&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;升级到最新版本：&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; i&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; agents@latest&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; @cloudflare/ai-chat@latest&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; @cloudflare/think@latest&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; @cloudflare/voice@latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;更多信息请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/runtime/&quot;&gt;Agents API 参考&lt;/a&gt; 和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/agents/communication-channels/chat/chat-agents/&quot;&gt;对话 agents 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Logs - Cloudflare Logs 中的新 Logpush 数据集及多个数据集字段更新</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-13-log-fields-updated/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-13-log-fields-updated/</guid><description>&lt;p&gt;Cloudflare 已更新 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;：&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;新数据集&quot;&gt;新数据集&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#新数据集&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Email Security Post-Delivery Events&lt;/strong&gt;：新数据集，字段包括 &lt;code&gt;AlertID&lt;/code&gt;、&lt;code&gt;CompletedAt&lt;/code&gt;、&lt;code&gt;Destination&lt;/code&gt;、&lt;code&gt;FinalDisposition&lt;/code&gt;、&lt;code&gt;Folder&lt;/code&gt;、&lt;code&gt;From&lt;/code&gt;、&lt;code&gt;FromName&lt;/code&gt;、&lt;code&gt;MessageID&lt;/code&gt;、&lt;code&gt;MessageTimestamp&lt;/code&gt;、&lt;code&gt;MicrosoftTenantID&lt;/code&gt;、&lt;code&gt;Operation&lt;/code&gt;、&lt;code&gt;PostfixID&lt;/code&gt;、&lt;code&gt;Reasons&lt;/code&gt;、&lt;code&gt;Recipient&lt;/code&gt;、&lt;code&gt;RequestedAt&lt;/code&gt;、&lt;code&gt;RequestedBy&lt;/code&gt;、&lt;code&gt;RequestedDisposition&lt;/code&gt;、&lt;code&gt;Status&lt;/code&gt;、&lt;code&gt;Subject&lt;/code&gt;、&lt;code&gt;Success&lt;/code&gt; 和 &lt;code&gt;To&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic Network Monitoring Flow Logs&lt;/strong&gt;：新数据集，字段包括 &lt;code&gt;AWSVPCFlowJSON&lt;/code&gt;、&lt;code&gt;Bits&lt;/code&gt;、&lt;code&gt;DestinationAS&lt;/code&gt;、&lt;code&gt;DestinationAddress&lt;/code&gt;、&lt;code&gt;DestinationPort&lt;/code&gt;、&lt;code&gt;DeviceID&lt;/code&gt;、&lt;code&gt;EgressBits&lt;/code&gt;、&lt;code&gt;EgressPackets&lt;/code&gt;、&lt;code&gt;Ethertype&lt;/code&gt;、&lt;code&gt;FlowProtocol&lt;/code&gt;、&lt;code&gt;FlowTimestamp&lt;/code&gt;、&lt;code&gt;NumFlows&lt;/code&gt;、&lt;code&gt;PacketID&lt;/code&gt;、&lt;code&gt;Packets&lt;/code&gt;、&lt;code&gt;Protocol&lt;/code&gt;、&lt;code&gt;RuleIDs&lt;/code&gt;、&lt;code&gt;SampleRate&lt;/code&gt;、&lt;code&gt;SampleRateType&lt;/code&gt;、&lt;code&gt;SamplerAddress&lt;/code&gt;、&lt;code&gt;SourceAS&lt;/code&gt;、&lt;code&gt;SourceAddress&lt;/code&gt;、&lt;code&gt;SourcePort&lt;/code&gt;、&lt;code&gt;TcpFlags&lt;/code&gt; 和 &lt;code&gt;Timestamp&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;现有数据集的字段更新&quot;&gt;现有数据集的字段更新&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#现有数据集的字段更新&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Firewall events（新增）&lt;/strong&gt;：&lt;code&gt;AISecurityInjectionScore&lt;/code&gt;、&lt;code&gt;AISecurityPIICategories&lt;/code&gt;、&lt;code&gt;AISecurityTokenCount&lt;/code&gt; 和 &lt;code&gt;AISecurityUnsafeTopicCategories&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP requests（新增）&lt;/strong&gt;：&lt;code&gt;AISecurityInjectionScore&lt;/code&gt;、&lt;code&gt;AISecurityPIICategories&lt;/code&gt;、&lt;code&gt;AISecurityTokenCount&lt;/code&gt;、&lt;code&gt;AISecurityUnsafeTopicCategories&lt;/code&gt; 和 &lt;code&gt;Subrequests&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关每个数据集的完整字段定义，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush 数据集&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Cloudflare Web Analytics - /cdn-cgi/rum 端点现在对非 POST 请求返回 405</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-13-rum-405-method-not-allowed/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-13-rum-405-method-not-allowed/</guid><description>&lt;p&gt;&lt;code&gt;/cdn-cgi/rum&lt;/code&gt; 信标（beacon）端点现在对非 POST 请求返回 &lt;code&gt;405 Method Not Allowed&lt;/code&gt;，而不是 &lt;code&gt;404 Not Found&lt;/code&gt;。根据 &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9110#section-15.5.6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RFC 9110 §15.5.6&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;，响应中包含 &lt;code&gt;Allow: POST, OPTIONS&lt;/code&gt; 标头。&lt;/p&gt;
&lt;p&gt;以前，向此端点发送 &lt;code&gt;GET&lt;/code&gt; 或其他非 POST 请求会返回 &lt;code&gt;404&lt;/code&gt;，这具有误导性，因为它表明该端点不存在。新的 &lt;code&gt;405&lt;/code&gt; 响应明确指出该端点存在，但仅接受 &lt;code&gt;POST&lt;/code&gt; 请求。&lt;/p&gt;
&lt;p&gt;Web Analytics 信标（&lt;code&gt;beacon.min.js&lt;/code&gt;）已经对所有指标提交使用 &lt;code&gt;POST&lt;/code&gt;，因此此更改不会影响信标的正常运行。针对 CORS 预检的 &lt;code&gt;OPTIONS&lt;/code&gt; 请求继续照常工作。&lt;/p&gt;
&lt;p&gt;欲了解更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/web-analytics/faq/#why-am-i-getting-a-405-method-not-allowed-error-from-cdn-cgirum&quot;&gt;Web Analytics FAQ&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><product>Cloudflare Web Analytics</product><category>Cloudflare Web Analytics</category></item><item><title>Cloudflare One, Access - Access 登录页面更新</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-access-login-page-refresh/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-access-login-page-refresh/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/reusable-components/custom-pages/access-login-page/&quot;&gt;Access 登录页面&lt;/a&gt;和&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/integrations/identity-providers/one-time-pin/&quot;&gt;一次性密码 (OTP)&lt;/a&gt; 页面现在采用全新设计，提高了视觉一致性、用户信任度和移动端自适应性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;更新前：&lt;/strong&gt;&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/access-login-old.CwNVkCQH_Z187ARH.webp&quot; alt=&quot;先前 Access 登录页面的屏幕截图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;532&quot; height=&quot;906&quot;&gt;
&lt;p&gt;&lt;strong&gt;更新后：&lt;/strong&gt;&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/access-login-new.Y7WUfg9G_1QeY33.webp&quot; alt=&quot;更新后的 Access 登录页面的屏幕截图&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;541&quot; height=&quot;722&quot;&gt;
&lt;p&gt;更新后的登录体验包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;统一的身份验证卡&lt;/strong&gt; - 所有登录选项（身份提供商按钮、电子邮件输入、OTP）现在都显示在具有一致样式的单个卡片中，取代了先前的多部分布局。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一致的按钮样式&lt;/strong&gt; - 身份提供商按钮使用统一的大小和布局，以便于快速浏览和选择。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更好的移动端体验&lt;/strong&gt; - 自适应布局的改进确保登录页面在手机和平板电脑上正确渲染。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;支持深色模式&lt;/strong&gt; - 登录页面现在支持深色模式。&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Access</category></item><item><title>Cloudflare WAN, Magic Transit, Cloudflare One - 新账户分配单个 IPv4 Anycast 地址</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-single-anycast-ip-default/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-single-anycast-ip-default/</guid><description>&lt;p&gt;默认情况下，现在为新的 Magic Transit 和 Cloudflare WAN 账户分配单个 IPv4 Anycast 地址。&lt;/p&gt;
&lt;p&gt;Cloudflare 会通过从全球许多分布式数据中心内的多个节点广播您的端点 IP，从而自动处理其网络上的故障。要处理您网络上的故障，请从不同的路由器配置两个隧道。&lt;/p&gt;
&lt;p&gt;如需为您的账户申请额外的 Anycast IP 地址，请联系您的账户团队。&lt;/p&gt;
&lt;p&gt;有关隧道配置指南，请参阅 Cloudflare WAN 的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/&quot;&gt;配置隧道端点&lt;/a&gt;或 Magic Transit 的&lt;a href=&quot;https://cloudflaredoc.ubitools.com/magic-transit/how-to/configure-tunnel-endpoints/&quot;&gt;配置隧道端点&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category><category>Magic Transit</category><category>Cloudflare One</category></item><item><title>Containers - 通过 Wrangler 进行 SSH 连接现已为容器默认启用</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-ssh-enabled-by-default/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-ssh-enabled-by-default/</guid><description>
&lt;p&gt;通过 Wrangler 进行 SSH 连接现已为&lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/&quot;&gt;容器&lt;/a&gt;默认启用。此前，您必须在容器配置中将 &lt;code&gt;ssh.enabled&lt;/code&gt; 设置为 &lt;code&gt;true&lt;/code&gt; 才能连接。&lt;/p&gt;
&lt;p&gt;此更改不会在您的容器上暴露任何公开可访问的端口。SSH 服务仅可通过 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers/wrangler/commands/containers/#containers-ssh&quot;&gt;&lt;code&gt;wrangler containers ssh&lt;/code&gt;&lt;/a&gt; 访问，该命令会对您的 Cloudflare 账户进行身份验证。您还需要在 &lt;code&gt;authorized_keys&lt;/code&gt; 中添加 &lt;code&gt;ssh-ed25519&lt;/code&gt; 公钥才能连接，因此仅启用 SSH 并不能授予访问权限。&lt;/p&gt;
&lt;p&gt;要连接，请在容器配置中添加公钥并运行 &lt;code&gt;wrangler containers ssh &amp;lt;INSTANCE_ID&amp;gt;&lt;/code&gt;：&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;containers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;authorized_keys&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;					&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;NAME&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;					&quot;public_key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;YOUR_PUBLIC_KEY_HERE&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;authorized_keys&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;name = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;NAME&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;public_key = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;YOUR_PUBLIC_KEY_HERE&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;p&gt;要禁用 SSH，请在容器配置中将 &lt;code&gt;ssh.enabled&lt;/code&gt; 设置为 &lt;code&gt;false&lt;/code&gt;：&lt;/p&gt;
&lt;div data-nb-tabs data-nb-sync-key=&quot;wranglerConfig&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.jsonc&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot; data-nb-lang=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;containers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;ssh&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;				&quot;enabled&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;wrangler.toml&quot; class&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot; data-nb-lang=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;ssh&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;enabled = &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;如需更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/containers/ssh/&quot;&gt;SSH 文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Gateway - 使用自然语言创建 Gateway 防火墙策略</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-natural-language-policy-creation/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-natural-language-policy-creation/</guid><description>&lt;p&gt;Cloudflare Gateway 现在支持针对 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/dns-policies/&quot;&gt;DNS&lt;/a&gt;、&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/http-policies/&quot;&gt;HTTP&lt;/a&gt; 和 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/network-policies/&quot;&gt;网络&lt;/a&gt;防火墙策略使用自然语言创建策略。管理员可以用纯文本描述他们想要的结果，Cloudflare 将生成一个完整的策略规则来填充策略生成器表单。&lt;/p&gt;
&lt;img src=&quot;https://cloudflaredoc.ubitools.com/_astro/gateway-create-with-ai.BYG07coh_1T38Vz.webp&quot; alt=&quot;Gateway 防火墙策略页面上的“使用 AI 创建”按钮&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2360&quot; height=&quot;1088&quot;&gt;
&lt;p&gt;要使用自然语言创建策略，请在任何 Gateway 防火墙策略选项卡上选择 &lt;strong&gt;Create with AI（使用 AI 创建）&lt;/strong&gt;。选择策略类型，描述该策略应执行的操作，随后一个完整配置的规则将显示在策略生成器中以供审查。您可以在保存之前编辑任何字段，或使用不同的提示词重新生成。&lt;/p&gt;
&lt;p&gt;生成的策略结合了您的账户上下文（包括列表、DLP 配置文件、应用和设备状态检查），从而自动解析对现有资源的引用。&lt;/p&gt;
&lt;p&gt;内置的反馈机制允许您对每个生成的策略进行评分并提供可选评论，Cloudflare 会使用这些评论来不断改进输出质量。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/traffic-policies/&quot;&gt;Gateway 防火墙策略&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>R2 - R2 Data Catalog 现在通过 GraphQL Analytics API 公开指标</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-r2-data-catalog-graphql-analytics/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-r2-data-catalog-graphql-analytics/</guid><description>&lt;p&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; 是直接内置于 R2 存储桶的托管 Apache Iceberg 数据目录，允许您将 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt;、Spark、Snowflake 和 DuckDB 等查询引擎连接到 R2 中的数据。&lt;/p&gt;
&lt;p&gt;您现在可以通过 Cloudflare 的 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/analytics/graphql-api/&quot;&gt;GraphQL Analytics API&lt;/a&gt; 查询 R2 Data Catalog 仓库的分析数据。两个新数据集现已可用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;r2CatalogDataOperationsAdaptiveGroups&lt;/code&gt;&lt;/strong&gt; 跟踪向目录发出的 Iceberg REST API 请求，包括操作类型、请求时长、HTTP 状态和请求体字节数。使用此数据集可监控跨仓库、命名空间和表的请求量和延迟。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;r2CatalogTableMaintenanceAdaptiveGroups&lt;/code&gt;&lt;/strong&gt; 跟踪表维护作业，例如压缩和快照过期。使用此数据集可监控作业成功率、处理的文件数、读写字节数和作业时长。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两个数据集均支持按仓库名称、命名空间、表名称和时间范围过滤。它们还包括时长指标的百分位聚合。&lt;/p&gt;
&lt;p&gt;有关详细的 Schema 信息和示例查询，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/r2/data-catalog/observability/metrics/&quot;&gt;R2 Data Catalog 指标和分析文档&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>Security Center - Agent Readiness 分数现在可通过 Cloudflare 仪表板在 URL Scanner 中查看</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-URL-scanner-report-agent-readiness/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-12-URL-scanner-report-agent-readiness/</guid><description>&lt;p&gt;我们在可通过 Cloudflare 仪表板访问的 URL Scanner 报告中添加了一个新的 &lt;strong&gt;Agent Readiness（Agent 就绪）&lt;/strong&gt; 标签页。此功能根据新兴的 AI 标准评估您的网站，并提供六个专业评分，以帮助您针对下一代 AI 代理和自动发现进行优化。&lt;/p&gt;
&lt;p&gt;互联网正在从人类阅读的网络向机器阅读的网络转变。AI 代理现在可以浏览网站、与之交互甚至在网站上执行交易。如果一个网站没有达到“代理准备就绪（agent-ready）”状态，这些机器人可能会消耗过多的带宽、无法找到关键信息，或者无法高效地导航您的服务。&lt;/p&gt;
&lt;p&gt;此更新通过将准备就绪程度分解为六个可操作的类别，提供了实质性的价值：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Basic Web Presence（基本 Web 存在）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discoverability（可发现性）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Accessibility（内容可访问性）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bot Access Control（Bot 访问控制）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protocol Discovery（协议发现）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commerce（商业）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;访问报告&quot;&gt;访问报告&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#访问报告&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;您可以直接在仪表板中或通过我们的 API 查看任何已扫描 URL 的这些分数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;仪表板&lt;/strong&gt;：前往 &lt;strong&gt;Protect &amp;amp; Connect（保护与连接）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Application Security（应用安全）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Investigate（调查）&lt;/strong&gt;。运行扫描后，在报告中选择 &lt;strong&gt;Agent Readiness（Agent 就绪）&lt;/strong&gt; 标签页。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API&lt;/strong&gt;：使用 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/radar/investigate/url-scanner/&quot;&gt;URL Scanner API&lt;/a&gt; 以编程方式检索您基础设施的这些分数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;欲了解这些分数背后方法的更多信息，请参阅&lt;a href=&quot;https://blog.cloudflare.com/agent-readiness/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;博客文章&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Windows (version 2026.4.1350.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-warp-windows-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces the new Cloudflare One Client UI for Windows! You can expect a cleaner and more intuitive design as well as easier access to common actions and information. Here are some of the many things we have found our users appreciate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right click context menu to access the most common client actions quickly&lt;/li&gt;
&lt;li&gt;Built-in captive portal login experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Additional Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added a new CLI command: warp-cli mdm refresh. This command executes an immediate refresh of the Mobile Device Management (MDM) configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration authentication for devices via the integrated WebView2 browser is unavailable in this version as a temporary measure. As a result, the client will utilize the default browser on the device to complete the authentication process.&lt;/li&gt;
&lt;li&gt;An error indicating that Microsoft Edge can&amp;#39;t read and write to its data directory may be displayed during captive portal login; this error is benign and can be dismissed.&lt;/li&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;Split tunnel list configuration is not available in the new UI. Management of Split Tunnel entries is currently only possible via &lt;code&gt;warp-cli tunnel ip&lt;/code&gt; and &lt;code&gt;warp-cli tunnel host&lt;/code&gt;. UI support will be added in a future release.&lt;/li&gt;
&lt;li&gt;Windows ARM may prompt the user to close running applications while trying to install this version. Simply click “Ok” with the default highlighted option.&lt;/li&gt;
&lt;li&gt;DNS resolution may be broken when the following conditions are all true:&lt;ul&gt;
&lt;li&gt;The client is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while the client is connected.&lt;br&gt;To work around this issue, please reconnect the client by selecting &amp;quot;disconnect&amp;quot; and then &amp;quot;connect&amp;quot; in the client user interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Mon, 11 May 2026 17:35:58 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for macOS (version 2026.4.1350.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-warp-macos-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces the new Cloudflare One Client UI for macOS! You can expect a cleaner and more intuitive design as well as easier access to common actions and information. Here are some of the many things we have found our users appreciate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right click context menu to access the most common client actions quickly&lt;/li&gt;
&lt;li&gt;Built-in captive portal login experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Additional Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added a new CLI command: warp-cli mdm refresh. This command executes an immediate refresh of the Mobile Device Management (MDM) configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;Split tunnel list configuration is not available in the new UI. Management of split tunnel entries is currently only possible via &lt;code&gt;warp-cli tunnel ip&lt;/code&gt; and &lt;code&gt;warp-cli tunnel host&lt;/code&gt;. UI support will be added in a future release.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Mon, 11 May 2026 17:35:57 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Linux (version 2026.4.1350.0)</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-warp-linux-ga/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux Cloudflare One Client is now available on the &lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release introduces the new Cloudflare One Client UI for Linux! You can expect a cleaner and more intuitive design as well as easier access to common actions and information. Here are some of the many things we have found our users appreciate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right click context menu to access the most common client actions quickly&lt;/li&gt;
&lt;li&gt;Built-in captive portal login experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added a new CLI command: warp-cli mdm refresh. This command executes an immediate refresh of the Mobile Device Management (MDM) configuration file.&lt;/li&gt;
&lt;li&gt;Official support for RHEL 9 has been added for Cloudflare Mesh nodes. To install the RHEL 9 package, the Extra Packages for Enterprise Linux (EPEL) repository must be active, as it contains dependencies required for the tray icon and captive portal webview.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registration may hang at &amp;quot;Checking your organization configuration&amp;quot; due to IPC errors. A system reboot should resolve the error, allowing registration to proceed.&lt;/li&gt;
&lt;li&gt;Split tunnel list configuration is not available in the new UI. Management of split tunnel entries is currently only possible via &lt;code&gt;warp-cli tunnel ip&lt;/code&gt; and &lt;code&gt;warp-cli tunnel host&lt;/code&gt;. UI support will be added in a future release.&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Mon, 11 May 2026 15:17:54 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare WAN, Magic Transit - UDP 端口 500 上的 IKE 支持 NAT-T</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-nat-t-port-500/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-nat-t-port-500/</guid><description>&lt;p&gt;Cloudflare IPsec 现在支持标准 NAT 穿透（NAT-T，NAT traversal）流程，其中 IKE 在 UDP 端口 &lt;code&gt;500&lt;/code&gt; 上启动，并在检测到 NAT 后切换到 UDP 端口 &lt;code&gt;4500&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;以前，必须将 NAT 后面的设备配置为直接在 UDP 端口 &lt;code&gt;4500&lt;/code&gt; 上发起 IKE。当路径中存在 NAT 时，在 UDP 端口 &lt;code&gt;500&lt;/code&gt; 上启动的设备无法完成 IKE 握手。这需要在 VeloCloud SD-WAN 边缘、Cisco IOS-XE 路由器和 Juniper SRX 防火墙等设备上进行自定义配置，而且并非在所有平台上都可行。&lt;/p&gt;
&lt;p&gt;已发生的变化：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NAT 后面的设备现在可以在 UDP 端口 &lt;code&gt;500&lt;/code&gt; 或 UDP 端口 &lt;code&gt;4500&lt;/code&gt; 上发起 IKE。&lt;/li&gt;
&lt;li&gt;在 UDP 端口 &lt;code&gt;500&lt;/code&gt; 上启动 IKE 并在检测到 NAT 后切换到 UDP 端口 &lt;code&gt;4500&lt;/code&gt; 的设备现在可以成功完成握手。&lt;/li&gt;
&lt;li&gt;Cloudflare 上不需要更改配置。此更改适用于 Cloudflare WAN 和 Magic Transit 上的所有 IPsec 隧道。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此更改不影响现有隧道：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;未检测到 NAT 且使用 UDP 端口 &lt;code&gt;500&lt;/code&gt; 的隧道继续像以前一样运行。&lt;/li&gt;
&lt;li&gt;配置为在 UDP 端口 &lt;code&gt;4500&lt;/code&gt; 上启动 IKE 的隧道继续像以前一样运行。&lt;/li&gt;
&lt;li&gt;NAT 检测逻辑未发生变化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关配置详细信息，请参阅&lt;a href=&quot;https://cloudflaredoc.ubitools.com/cloudflare-wan/reference/gre-ipsec-tunnels/&quot;&gt;GRE 和 IPsec 隧道&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category><category>Magic Transit</category></item><item><title>WAF - WAF 发布 - 2026-05-11</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-waf-release/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-11-waf-release/</guid><description>
&lt;p&gt;&lt;strong&gt;主要发现&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;已部署现有规则增强功能，以提高针对广泛 Web 攻击的检测弹性，并加强行为覆盖范围。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;持续规则改进&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们正在不断完善托管规则，以提供更具弹性的防护，并对攻击模式进行更深入的洞察。为了确保最佳的安全态势，我们建议持续监控安全事件（Security Events）仪表板，并在部署这些增强功能时调整规则操作。&lt;/p&gt;
&lt;table style=&quot;width: 100%&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;规则集&lt;/th&gt;&lt;th&gt;规则 ID&lt;/th&gt;&lt;th&gt;旧版规则 ID&lt;/th&gt;&lt;th&gt;描述&lt;/th&gt;&lt;th&gt;先前操作&lt;/th&gt;&lt;th&gt;新操作&lt;/th&gt;&lt;th&gt;注释&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare 托管规则集&lt;/td&gt;&lt;td&gt;&lt;rule-id id=&quot;23ac4a9e53f94467ba470c9468b3c389&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...68b3c389&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;&lt;script type=&quot;module&quot; src=&quot;https://cloudflaredoc.ubitools.com/Users/jt.gui/workspace/astro/cloudflare-docs/src/components/cf/RuleID.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/td&gt;&lt;td&gt;无&lt;/td&gt;&lt;td&gt;Remote Code Execution - Java Deserialization - Body - Beta&lt;/td&gt;&lt;td&gt;阻断&lt;/td&gt;&lt;td&gt;已禁用&lt;/td&gt;&lt;td&gt;&lt;p&gt;这是新的检测。此规则已合并到原始规则 &quot;Remote Code Execution - Java Deserialization&quot;（ID： &lt;rule-id id=&quot;36b0532eb3c941449afed2d3744305c4&quot;&gt;&lt;button title=&quot;Copy rule ID&quot; aria-label=&quot;Copy rule ID&quot; class=&quot;border-border bg-muted hover:border-foreground/30 hover:bg-accent inline-flex cursor-copy items-center rounded-md border px-1.5 py-0.5 transition-colors duration-150&quot;&gt;&lt;span class=&quot;font-mono text-[0.8125rem] font-medium&quot;&gt;...744305c4&lt;/span&gt;&lt;/button&gt;&lt;/rule-id&gt;）中。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers AI - Workers AI 上计划的模型弃用</title><link>https://cloudflaredoc.ubitools.com/changelog/post/2026-05-08-planned-model-deprecations/</link><guid isPermaLink="true">https://cloudflaredoc.ubitools.com/changelog/post/2026-05-08-planned-model-deprecations/</guid><description>&lt;p&gt;我们正在更新 Workers AI 模型目录，以为新发布的版本让出空间。请在弃用日期之前更新您的应用程序，以移除对下列模型的引用。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;推荐替代方案&quot;&gt;推荐替代方案&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#推荐替代方案&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/glm-4.7-flash/&quot;&gt;&lt;code&gt;@cf/zai-org/glm-4.7-flash&lt;/code&gt;&lt;/a&gt; — 具有多轮工具调用和编码能力的快速多语言模型。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/gemma-4-26b-a4b-it/&quot;&gt;&lt;code&gt;@cf/google/gemma-4-26b-a4b-it&lt;/code&gt;&lt;/a&gt; — 具有视觉和工具调用功能的高效开源模型。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/kimi-k2.6/&quot;&gt;&lt;code&gt;@cf/moonshotai/kimi-k2.6&lt;/code&gt;&lt;/a&gt; — 适用于智能体工作负载和编码且功能强大的工具调用与视觉模型。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关定价，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/platform/pricing/&quot;&gt;Workers AI 定价页面&lt;/a&gt;。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;kimi-k25&quot;&gt;Kimi K2.5&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#kimi-k25&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;我们最初表示 Kimi K2.5 将于 2026 年 5 月 10 日弃用，但我们已将弃用日期延长至 2026 年 5 月 30 日。请求将于 2026 年 5 月 30 日自动别名（aliased）到价格更高的 Kimi K2.6。请在 2026 年 5 月 30 日之前查看 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/kimi-k2.6/&quot;&gt;&lt;code&gt;@cf/moonshotai/kimi-k2.6&lt;/code&gt;&lt;/a&gt; 的定价和模型能力，以确保该模型满足您的需求。&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;于-2026-年-5-月-30-日弃用的模型&quot;&gt;于 2026 年 5 月 30 日弃用的模型&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#于-2026-年-5-月-30-日弃用的模型&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@cf/moonshotai/kimi-k2.5&lt;/code&gt; --&amp;gt; &lt;code&gt;@cf/moonshotai/kimi-k2.6&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@hf/meta-llama/meta-llama-3-8b-instruct&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/meta/llama-3-8b-instruct&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/meta/llama-3-8b-instruct-awq&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/meta/llama-3.1-8b-instruct&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/meta/llama-3.1-8b-instruct-awq&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/meta/llama-3.1-70b-instruct&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/meta/llama-2-7b-chat-int8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/meta/llama-2-7b-chat-fp16&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/mistral/mistral-7b-instruct-v0.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@hf/mistral/mistral-7b-instruct-v0.2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@hf/google/gemma-7b-it&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/google/gemma-3-12b-it&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@hf/nousresearch/hermes-2-pro-mistral-7b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/microsoft/phi-2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/defog/sqlcoder-7b-2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/unum/uform-gen2-qwen-500m&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/facebook/bart-large-cnn&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;保持活跃的变体&quot;&gt;保持活跃的变体&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#保持活跃的变体&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;模型的 &lt;code&gt;-fast&lt;/code&gt; 和 &lt;code&gt;-lora&lt;/code&gt; 变体将保持活跃，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@cf/meta/llama-3.3-70b-instruct-fp8-fast&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/meta/llama-3.1-8b-instruct-fast&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/google/gemma-7b-it-lora&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/google/gemma-2b-it-lora&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/mistral/mistral-7b-instruct-v0.2-lora&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@cf/meta-llama/llama-2-7b-chat-hf-lora&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;LoRA 模型在未来可能会被弃用。我们将向目录中添加更多 LoRA 功能，并会在新的 LoRA 模型上线时进行沟通，以便在弃用旧模型之前给用户留出训练新 LoRA 的时间。&lt;/p&gt;
&lt;p&gt;如需获取可用模型的完整列表，请参阅 &lt;a href=&quot;https://cloudflaredoc.ubitools.com/workers-ai/models/&quot;&gt;Workers AI 模型目录&lt;/a&gt;。&lt;/p&gt;</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item></channel></rss>