Cloudflare 被高度多樣化的客戶群所使用。我們提供簡單易用的產品來實現各種功能,包括設定 HTTP 標頭、重寫 URI 路徑及執行 URL 重新導向。有時,客戶需要的不僅僅是開箱即用的功能,不僅僅是新增 HTTP 標頭,而是執行一些進階計算來建立輸出。如今,他們需要建立功能請求並等待它被交付、編寫 Cloudflare Worker,或者將此修改保留在「原點」,即他們自己的基礎結構上。
為了簡化這一點,我們很高興地推出了 Cloudflare Snippets。Snippets 是一種執行流量修改的新方法,因為使用者或無法透過我們的產品化產品進行修改,或希望以程式設計方式進行修改。其最大的優點是什麼呢?絕大多數客戶無需_為使用 Snippets_ 支付額外費用。
使用者現在可以自行選擇。既可透過規則執行動作。或者,如果需要更多功能,也可編寫 Snippet。兩種方式都無需等待。也都不會產生額外費用(但會採用較高的公平使用上限)。藉由 Snippets,使用者可隨時執行想要進行的操作。一切均可在 Cloudflare 上進行。
Snippets 將支援匯入用各種語言編寫的代碼,例如 JavaScript(現代),VCL(傳統)和 Apache .htaccess 檔案(傳統)。這允許客戶將傳統操作碼遷移到我們的平台上,同時還可以整合他們的 JavaScript 操作。
如果您對測試感興趣,請使用註冊表單加入 Snippets 的等候名單。我們希望在 2023 年初開始讓使用者進入封閉測試版。
在過去的 18 個月中,我們發佈了許多新的規則產品,例如 Transform Rules、 Cache Rules、Origin Rules、Config Rules 及 Redirect Rules。這些新產品讓客戶可以更好地控制我們處理流經我們全球網路的流量的方式。到目前為止,對這些產品的反饋都非常積極。但是,我們的客戶有時仍然需要能夠執行超出開箱即用功能所允許的功能。
在一些使用案例中,產品無法提供客戶針對其特定情況所需的功能,這種情況時有發生。例如,雖然成千上萬的客戶現在正在使用 Transform Rules 來處理 HTTP 標頭修改使用案例,但仍有少數使用案例無法實現,例如使用 Cookie 設定動態到期時間或使用金鑰對權杖進行雜湊處理。
這就是 Cloudflare Snippets 的用武之地。客戶將不再需要使用完整的 Cloudflare Workers 平台來實施這些相對簡單的使用案例。也不需要等待我們構建他們的功能請求。而是能夠自己執行 JavaScript 的 Snippet。
Varnish 控制語言 (VCL) 僅在 Varnish 上下文中使用。其大約在 16 年前推出,由於可擴充至廣泛的使用案例,其歷來用於為內容傳遞網路設定流量和路由。
仍然有很多企業使用 VCL 來執行路由和流量修改動作。雖然其他提供者正在取消對 VCL 的支援,但我們希望確保那些習慣使用這一功能的人仍然受支援。
Snippets 不會執行純 VCL。相反,我們會將 VCL 轉換為易於維護的規則或 Snippets。為了實現這一目標,我們正在構建一個簡單易用的自助式 VCL 轉換器,用於分析上傳的 VCL 程式碼並自動產生建議的 Snippets,如果我們能找到相符項,還會為 Transform Rules 或 Cache Rules 等產品產生建議的規則。
該主題最初是透過 Project Turpentine 處理的,這是 Cloudflare 員工用來將客戶的 VCL 解析為建議的 JavaScript 設定的一套工具。然後可以將此 JavaScript 載入到 Worker 或一系列 Worker 中。
Snippets 進一步發展了 Turpentine 的理念和原則。更上一層樓。透過直接在儀錶板中構建解析器,它將權力直接交到使用者手中,並為他們提供選擇。您可以告訴我們將所有內容遷移到 Rule 中,並將剩餘程式碼遷移到 Snippets 中,或者您可以選擇告訴我們將所有內容遷移到離散 Snippets 中。一切取決於您。
我們將以相同的方式處理 Apache htaccess 和 NGINX 設定檔案。目標是使用者只需從他們的網站 Apache 或 NGINX 設定上傳文件,我們就會產生建議的 Snippets 和/或規則。
必須使用傳統程式碼執行操作任務的時代即將結束。Snippets 允許使用者將這些工作負載遷移到 Cloudflare,並讓他們專注於業務與維護傳統系統之間的更大問題。
大多數讀者已經很熟悉 Cloudflare Workers,這是我們強大的開發人員平台,企業可以透過該平台在 Cloudflare 的全球網路上執行和構建完整的產品和解決方案。Snippets 同樣是在這個平台上構建的,但有一些關鍵區別。
第一個主要區別是 Snippet 將作為規則集引擎的一部分並作為專用的新_階段_執行,類似於 Transform Rules 與 Cache Rules。客戶將能夠根據任何規則集引擎篩選器選擇和執行 Snippet。這允許客戶針對每個請求執行 Snippet,或根據我們提供的欄位篩選特定的 HTTP 流量,例如具有特定機器人分數、來自特定國家/地區或具有特定 Cookie 的流量。Snippets 將可新增,這意味著使用者可以用一個 Snippet 來新增 HTTP 標頭,用另一個 Snippet 來重寫 URL,如果相符,則兩者均將執行:
另一個主要區別是,所有方案級別均免費提供 Cloudflare Snippets。99% 的使用者無需支付任何費用即可使用此解決方案。這使客戶能夠將其簡單的工作負載從 VCL 等傳統解決方案遷移到 Cloudflare 平台,並大大減少每月支出。
免費方案
|
Free Plans |
Pro Plans |
Business Plans |
Enterprise Plans |
Snippets available |
5 Snippets per zone. |
20 Snippets per zone. |
50 Snippets per zone. |
200 Snippets per zone* (Customers can speak with their Customer Success team to have this increased). |
Pro 方案
|
Cloudflare Snippets |
Cloudflare Workers Unbound (For comparison) |
Runtime support |
JavaScript |
JavaScript and WASM |
Execution location |
Global - All Cloudflare locations |
Global - All Cloudflare locations |
Triggers supported |
Ruleset Engine Filters |
HTTP Request HTTP Response Cron Triggers |
Maximum execution time |
5ms |
30 Seconds HTTP 15 Minutes (Cron Trigger) |
Maximum memory |
2MB |
128MB |
Total package size |
32KB |
5MB |
Environment variables |
8/Snippet |
64/Worker |
Environment variable size |
1KB |
5KB |
Subrequests |
1/request |
1000/request |
Terraform Support |
✅ |
✅ |
Wrangler Support |
|
✅ |
Cron Triggers |
|
✅ |
Key Value Store |
|
✅ |
Durable Objects |
|
✅ |
R2 Integration |
|
✅ |
Business 方案
Enterprise 方案
可用 Snippets
每個區域 5 個 Snippets。
…
if (request.cf.botManagement.score < 30) {
const honeypot = "https://example.com/";
return await fetch(honeypot, request);
…
}
每個區域 20 個 Snippets。
每個區域 50 個 Snippets。
…
{
let res = await fetch(request);
res = new Response(res.body, res);
// 24h * 60m * 60s * 1000ms = 86400000ms
const expiry = new Date(Date.now() + 7 * 86400000).toUTCString();
const group = request.headers.get("userGroup") == "premium" ? "A" : "B";
res.headers.append(
"Set-Cookie",
`testGroup=${group}; Expires=${expiry}; path=/`
);
…
每個區域 200 個 Snippets* (客戶可以與其 Customer Success 團隊協商以增加此值)。
相較於 Workers,Cloudflare Snippets 是一款輕量級工具,可提供 5 毫秒的最大執行時間、2MB 的最大記憶體和 32KB 的總封包大小。 由於佔用空間相對較小,我們能夠免費向 99% 的使用者提供此功能,同時還足以處理各種已知使用案例,如 HTTP 標頭修改、URL 重寫和流量路由。所有這些都不需要 Cloudflare Workers 提供的大量資源。
…
if (userAgent.includes("Facebook")) {
const url = new URL(request.url);
const params = new URLSearchParams(url.search);
params.set("utm_campaign", "facebook");
url.search = params.toString();
const transformedRequest = new Request(url, request)
…
}
Cloudflare Snippets
Cloudflare Workers Unbound(比較)
執行階段支援
JavaScript
JavaScript 和 WASM
執行位置
全球 - 所有 Cloudflare 位置
全球 - 所有 Cloudflare 位置
支援的觸發程序
規則集引擎篩選器
HTTP 請求HTTP 回應Cron 觸發程序
最長執行時間
5 毫秒
30 秒 HTTP15 分鐘(Cron 觸發程序)
最大記憶體
2MB
128MB
總封包尺寸
32KB
5MB
環境變數
8/Snippet
64/Worker
環境變數大小
1KB
5KB
子請求
1/請求
1000/請求
Terraform 支援
✅
✅
Wrangler 支援
✅
Cron 觸發程序
✅
鍵值存儲
✅
Durable Objects
✅
R2 整合
✅
您可以使用 Cloudflare Snippets 構建什麼?
Snippets 將允許客戶將其現有工作負載遷移到 Cloudflare,還讓客戶能夠處理許多新的使用案例。我們重點介紹了以下三個常見範例,但是還有更多可供選擇。
建立 Snippets 時,客戶將能夠存取所執行 Workers 中的可用 Cloudflare 功能,例如機器人評分欄位。這使客戶能夠將 HTTP 請求轉送至網路誘捕系統,或使用 RegExp Javascript 函數,在流量分配的機器人評分低於特定閾值(例如 29 分或更低)時變更傳送回終端使用者的 URL 構造。
我們預見到 Snippets 尋址的另一個常見使用案例是 Cookie 修改。使用情況包括使用 getTime
和 setTime
JavaScript 函數簡單地設定五分鐘內到期及根據使用者請求屬性設定動態 Cookie 以進行 A/B 測試。
客戶還可以部署 Cloudflare Snippets 來執行複雜的操作,例如拼接 URI 查詢值以選擇性地移除或注入其他參數。查詢字串操作通常使用 Transform Rules 完成。但是,使用 Transform Rules 時,set/
動作實際上是 replace
動作。此動作套用至 URI 查詢字串時將移除整個值(如有),並將其設定為使用者指定的值,從而進行覆寫。對於希望選擇性地注入特定查詢參數以匹配流量的客戶來說,這是一個問題。例如,在使用者代理程式中偵測到常見社交媒體平台時設定一個額外的查詢,如 ?utm_campaign=facebook
。使用 Snippets,客戶將能夠使用簡單的 JavaScript 片段進行這種選擇性移除和插入,例如
我們很高興看到 Cloudflare Snippets 為客戶解鎖了其他使用案例。
答案是否定的!我們將繼續在規則集引擎中構建無程式碼動作,開發新產品來滿足客戶需求。
顯而易見的是,功能改進的核心部分是與客戶溝通。與 Snippet 使用者溝通有助於我們瞭解 Snippets 能夠處理哪些現實生活中的使用案例,突出產品套件中存在的功能差距。然後,我們可以審查將該使用案例產品化是否有意義,或者需要 Snippets 來處理。
我們也明白,並不是每個人都是軟體開發人員。因此,我們正在探索如何透過建立可在庫中使用的可選範本來使所有人都可以存取 Snippets。客戶無需太多編碼知識即可複製和修改這些範本。Snippets 不僅功能強大,而且使用簡單。
Snippets 目前正在開發中,您可以在此處註冊以加入存取的等候名單。
我們希望在 2023 年初開始讓使用者加入封閉測試版,隨後將推出公開測試版。