Xget 是什麼?開源加速引擎把 GitHub 與 AI API 流量改走 Cloudflare

Xget 是開源的 Cloudflare Worker 反向代理,在網址前面加上 /gh/、/pypi/、/cr/ 等前綴,就能讓 GitHub、PyPI、Docker 映像檔與 29 家 AI 推論 API 的請求改走它的入口。這篇從線上實測與原始碼核對它的真實行為:快取與重試的實際規則、Range 分片在快取命中時拿不到 206、公共實例的速率限制,以及把 AI API 金鑰交給公共實例前該想清楚的信任邊界。

用 AI 摘要這篇文章:

抓 GitHub 檔案龜速、Docker pull 卡住、HuggingFace 模型拉不下來,這些問題在中國大陸的開發環境很常見,Xget 就是為此而生:一個用 AGPL-3.0 授權釋出的 Cloudflare Worker 反向代理,把網址前面加上 /gh//pypi//cr/ 這類前綴,請求就改走它的入口,由 Cloudflare 的邊緣節點去向來源伺服器拿檔案。原始碼裡的平台目錄共 84 個前綴,涵蓋程式碼代管、套件庫、Linux 發行版、容器映像檔,還有 29 家 AI 推論供應商。

先講我的判斷:這個專案的工程做得細,多協定識別與快取規則都經得起對照原始碼檢驗;但它真正需要你決定的問題只有一個,就是要不要把開發流量交給一個你無法驗證的第三方。作者本人把公共實例定位成「For evaluation and trial only」(僅供評估試用),要長期用就該自架一份。兩條路的代價,下面攤開來看。

三種用法,三種信任層級

最輕的用法是偶爾手動抓檔:把網址貼進官方的 URL 轉換器,拿到前綴版連結再下載,這種用法暴露的只有你的 IP 與抓了什麼檔案,風險跟用任何公共鏡像站差不多。再往下一層是把整個開發環境指向它,例如 pip 的索引、Docker 的 registry、甚至 AI SDK 的 base_url,這時流量裡的內容就全經過營運者了。最重的一層是自架:fork 專案部署到自己的 Cloudflare 帳號,或用 Docker 跑在自己的伺服器上,信任邊界縮回自己手裡,但帳單與被濫用的風險也換你扛。

這個分層是 README 自己畫出來的。Quick Start 一開頭就寫明預部署實例僅供評估試用,建議生產環境或對可用性敏感的工作負載自行部署;緊接著的警告更直接:自架後要加上認證或 IP 白名單,除非你明確想經營一個公開鏡像站。一份文件同時把「公共實例別太依賴」與「自架別裸奔」講清楚,這在同類工具裡少見,也是我願意認真對待這個專案的原因。

Xget 專案 README 的 Quick Start 段落截圖,寫明預部署實例 xget.xi-xu.me 僅供評估試用,生產環境應自行部署,並以警告區塊提醒自架者要加上認證或 IP 白名單Pin
Xget 的 README 在 Quick Start 就把話講白:公共實例僅供評估試用,自架要加認證或 IP 白名單(2026 年 8 月,GitHub repo)

實測公共實例:代理本身是真的

公共實例 xget.xi-xu.me 是活的,而且行為與原始碼一致。從台灣實測,抓 /gh/ 前綴的 GitHub 倉庫頁面,1.3 MB 的 HTML 在 1.5 秒左右回來,回應帶著 X-Performance-Metrics 標頭,這次請求顯示整體約 1.1 秒完成,部署設定採 Smart Placement(Cloudflare 依流量自動把程式排到合適節點的機制),回應標頭也標出這次請求在高雄的本地節點處理。HTTP/3 有開(alt-svc 標頭),安全標頭也齊:HSTS、CSP、X-Content-Type-Options 都在。

內容改寫也在運作。抓 /pypi/simple/requests/ 這一頁,頁面上 244 個 wheel 下載連結全部被改成 xget.xi-xu.me/pypi/files/ 開頭,對應原始碼裡把 files.pythonhosted.org 替換掉的那行程式;也就是說,把 pip 索引指過去之後,後續的套件下載會自動走代理。AI 代理同樣通:不帶金鑰去打 /ip/openai/v1/models,回來的是 OpenAI 自家格式的 401 錯誤,證明請求確實被轉發到 api.openai.com。

限制也實測到了。短時間連續發十幾個請求後,公共實例的 Cloudflare 速率限制會把後續請求擋下(HTTP 429),冷卻幾分鐘才恢復;另一個觀察是 Git 操作,實測期間對它發 git clone 一律收到 429,同一個端點用 curl 單發卻是 200。這不代表 clone 功能壞了(README 對 clone、push、LFS 都有完整文件),但把公共實例當生產管線的人,會先撞上節流這堵牆。作者標它僅供評估試用,與實測體驗是一致的。

Range 分片下載在快取命中時會失效

這是這次實測最意外的一個點。Xget 標榜支援 HTTP Range,回應也確實帶 Accept-Ranges: bytes,多連線下載器靠分片請求榨速度的能力理論上應該保留。但對一個已經進邊緣快取的檔案(倉庫 main 分支的 zip,約 300 KB)連發兩次 Range 請求,分別要前 1 KB 與中間 1 KB,兩次拿到的都是 HTTP 200 加上完整的 300,290 位元組,沒有 206,也沒有 Content-Range 標頭。

翻原始碼可以解釋這個行為:快取層在命中「完整檔案」的快取後,直接把整份回應交回去(程式裡的 cache_hit_full_content 路徑),整個 repo 找不到把全檔切成分片再回 206 的邏輯,206 只出現在上游直接回傳的場合。對讀者的實際影響是:aria2、IDM 這類靠多連線分片的工具,在快取命中的物件上拿不到分片回應,加速效果取決於快取狀態與單連線品質。下載大檔前別對分片加速抱太高期待,這由原始碼結構決定,與設定無關。

一個 Worker 怎麼吃下 84 個平台

Xget 的核心是兩張表加一套規則。第一張表是平台目錄,gh 對 github.com、pypi 對 pypi.org、cr-ghcr 對 ghcr.io,以此類推共 84 條;第二張是路徑轉換規則,例如 /crates/serde 要轉成 crates.io 的 API 路徑 /api/v1/crates/serde。剩下的是協定識別:Git 請求靠 /info/refs/git-upload-pack 這類端點特徵加 User-Agent 判斷;Docker 請求靠 /v2/ API 與 manifest 的 Accept 標頭判斷,認證流程會自己向 registry 要匿名 token 再重試。整套邏輯三千多行,跑在一個 Worker 裡。

Docker 這段可以多看兩眼,因為它處理的是同類工具最容易斷掉的地方。公有映像檔的流程是:客戶端收到認證挑戰後,Xget 解析 WWW-Authenticate 標頭、向 registry 要匿名 token、帶著 token 重試,客戶端全程無感;私有映像檔的登入則要多想一步:Xget 會把 401 挑戰改指向自己的 auth 端點,客戶端是對 Xget 登入,帳密在 token 協商時由 Worker 轉送給上游 registry,憑證一樣經過它的手。Git 流量也保留了完整的請求標頭與認證資訊,clone、push、pull、LFS 大檔都有文件,這也是它敢標榜完整支援 Git 協定的本錢。配套的還有內容改寫:PyPI 的 HTML 索引頁把下載連結換成前綴版,npm 的套件 JSON 裡 tarball 位址也一樣換掉,生態系的慣性就這樣接上。

方法白名單的設計同樣看得出有想過:一般請求只放行 GET 與 HEAD,被識別為 Git、LFS、Docker、AI、HuggingFace 的協定流量才允許 POST 等動詞。換句話說,它把目標明確限定在開發者資源的取得,通用代理那種什麼都能轉的路線刻意不碰,這條線也畫在免責聲明裡:使用者要遵守所在地法規與各平台服務條款。

快取階梯也寫得很清楚:不可變的 artifact(例如 release 檔案)在邊緣快取 24 小時,套件中繼資料 60 秒,其他 5 分鐘;Git、Docker、AI、HuggingFace 這類協定流量一律不走快取;帶 Authorization 或 Cookie 的請求直接標 private, no-store。重試上限 3 次、線性退避(1 秒乘以次數)、單請求 30 秒逾時,上游回 4xx 不重試、直接把回應送回,URL 長度上限 2048。其中逾時、重試、快取 fallback 這些部署時能用環境變數調整,24 小時與 60 秒兩階快取則是寫死在程式裡。

有個細節要記下:原始碼設定的 X-Frame-Options 是 DENY,但公共實例實際回的是 SAMEORIGIN,Referrer-Policy 也從程式裡的 strict-origin-when-cross-origin 變成 same-origin。落差來自部署層的區域(Zone)設定,程式碼本身沒有問題,換句話說,自架者拿到的安全標頭由自己的 Cloudflare 設定決定,讀原始碼與看線上行為要兩邊對照才算數。如果你對 Cloudflare 這層不熟,Cloudflare 免費 CDN 與 DNS 的完整教學值得先讀一遍。

AI API 金鑰經過它,這段要自己讀完

README 的 AI 章節直接示範把 OpenAI、Anthropic、Gemini SDK 的 base_url 指向公共實例再填上自己的 api_key。這在技術上意味著:你的金鑰、送出的提示詞、模型回的內容,全部經過營運者的 Worker。反向代理看得到這些東西是常識,不是漏洞;程式對帶授權標頭的請求不做快取(no-store),這保證的是你的內容不會被快取再洩給別人,保證不了營運者看不到。

29 家供應商在原始碼裡各有獨立前綴,從 OpenAI、Anthropic、Gemini 到 Groq、Cerebras、OpenRouter 都有,統一走 /ip/ 起手,例如 /ip/openai/v1/ip/anthropic。文件還示範了同一份程式碼掛多個供應商輪流打的寫法,對想在同一支腳本裡比較各家模型的開發者確實方便。方便的另外一面就是集中:金鑰與對話內容本來分散在各家官方端點,現在共用同一個中繼站,這個中繼站的營運者是誰、跑在哪個司法管轄區,就成了你該知道的資訊。

README 的免責聲明說這個專案採無日誌架構、不儲存使用者請求資料。這句話與 repo 附的部署設定有些張力:wrangler.toml 把 Workers 的觀測日誌打開了,invocation 日誌會在 Cloudflare 平台層留下請求紀錄(包含 URL)。兩者不必然矛盾,畢竟「不儲存請求資料」講的是應用層,但對隱私較真的讀者該理解的版本是:程式碼作者能控制的是自己的程式,平台層留下什麼由 Cloudflare 決定,而 Cloudflare 對這類公共實例的態度也寫在它的服務條款裡。把生產用的 AI 金鑰交給任何公共代理前,這筆帳都要算過。

自架把邊界收回來,代價是帳單與濫用

自架有七條路:Cloudflare Workers 與 Pages、EdgeOne Pages、Vercel、Netlify、Deno Deploy,或用 Docker 跑在自己的伺服器上。最省事的流程是 fork 專案、在 GitHub Secrets 填上 Cloudflare 的 API token,推上 main 就自動部署;想完全脫離 Cloudflare,Docker 那條路可以落在自己的 VPS。願意把服務收在自己機器上的讀者,可以參考QuantDinger 用 Docker 把服務留在自己伺服器的作法,思考模式是同一種。

但 README 的警告要認真看待:自架的 Xget 就是一個公開的反向代理,任何知道網址的人都能拿它轉發流量,頻寬費用算你的,被來源伺服器封鎖也是你的事。掛上認證或 IP 白名單再上線,是作者明文給的建議。另外授權是 AGPL-3.0:內部自用沒有額外義務,改了程式又對外提供服務,就有釋出原始碼的義務,公司環境導入前讓法務看一眼。

專案的治理現實也要放進決策。這是一個 2024 年 11 月開始的專案,超過 8,200 顆星、1,300 多個 fork,最後一次推送在 2026 年 8 月 18 日,維護活性沒問題;但提交紀錄裡作者本人佔 587 次,Dependabot 與 GitHub Actions 等機器人合計 267 次,其他人類貢獻者是個位數,也沒有用 GitHub Releases 發過版本。它是活躍的單人專案,公車因子(關鍵一人離開專案就停擺)真實存在,這也是「要用的話自架一份」的另一個理由:至少你跑的版本自己凍得住。同場還有一個 398 顆星的瀏覽器擴充功能 Xget-Now(GPL-3.0),會自動把支援平台的網址轉成前綴版,適合常手動下載的人。

想試的話,兩分鐘就能驗證它

最快的驗證方式不用安裝任何東西:挑一個 GitHub 檔案網址,把網域換成 xget.xi-xu.me、路徑前加上 /gh/,用瀏覽器或 curl 抓一次,看下載是否完成、標頭是否符合預期;再換成你實際會用的平台前綴試一次。要批次轉換就把網址丟進轉換器;要長期用,照前面說的自架並掛上認證。

Xget 官方 URL 轉換器 xuc.xi-xu.me 頁面截圖,左側輸入原始網址與平台選單,右側顯示轉換後的前綴版加速連結與前綴後綴對照,介面為簡體中文Pin
官方的 URL 轉換器 xuc.xi-xu.me:貼上原網址就產生前綴版連結,頁面本身是靜態頁,介面為簡體中文(2026 年 8 月)

還有個另類的切入點:作者另在獨立倉庫維護了一份 Xget 的 Agent Skill,用一行指令裝進支援 skills 的 AI 編碼代理後,代理便知道怎麼把下載與套件安裝導向 Xget 格式(README Quick Start 附了指令)。讓 AI 工具鏈自己處理網址轉換是聰明的應用,但信任問題沒有變:代理導到哪個實例,流量就落到誰手上,自架的實例在這裡同樣是比較穩的答案。

至於台灣的讀者值不值得導入:直連 GitHub、Docker Hub、HuggingFace 在台灣通常沒有大問題,這類加速工具的公共實例主要服務的是中國大陸的網路環境,同題材的 SmartHostsTool 用測速把被汙染的 DNS 指向最快可用 IP 也是同一個脈絡,但兩者層級不同:hosts 檔工具只改 IP 對應,Xget 是完整的反向代理,能處理的協定與平台多得多。真正能用上它的場景是公司網路對某些來源伺服器品質不穩、CI 要重複拉大量套件、或你想在自己的基礎設施上養一台多協定加速器;把它當 Cloudflare Workers 的協定工程範例來讀,也有收穫。開發者工具自架的主題我們介紹過不少,AI-CodeNexus 可自架的開發者資訊聚合站是另一個例子。

Xget 解決的是結構性的慢,不是你的慢。公共實例拿來驗證與救急可以,長期依賴前先想清楚金鑰與流量經過誰;真要上,自架掛認證,把信任圈收回自己可以驗證的範圍。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 926

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...