2026-08-27 · 協定科普 · 約 10 分鐘

ss://、vmess://、vless://、trojan:// 分享連結格式解析:單一節點連結與訂閱連結差異

解析四種分享連結的欄位結構與編碼方式,說明單一節點連結和訂閱網址在匯入與更新上的差異;範例皆為虛構資料。

本文速覽

單一節點分享連結會儲存連線參數;訂閱網址則指向可重新取得的節點集合。本文適合已持有服務商提供的訂閱資訊、需要確認匯入格式的使用者:先辨別連結類型,再檢查編碼、位址、連接埠與 TLS 欄位,最後釐清匯入成功、連線成功與規則生效的差別。所有網域、密碼、UUID 與 token 均為示範用虛構值,無法用於實際連線。

[URI] 先分辨參數連結與訂閱入口

Shadowrocket(小火箭)中的單一節點項目與訂閱群組是不同類型的資料。以 ss://、vmess://、vless:// 或 trojan:// 開頭的分享連結,通常包含單一節點的連線參數;以 https:// 開頭的訂閱網址,則需要由 App 向伺服器發出請求,讀取回傳內容後產生節點清單。不能只看連結長度判斷類型。

4 種
本文解析的 URI scheme:ss / vmess / vless / trojan
8388
本文中的 Shadowsocks 範例連接埠,並非固定要求
443
本文中的 TLS 範例連接埠,實際值由既有服務參數決定

分享連結是一份參數快照。匯入後,遠端更改位址或密碼,不會自動更新這個獨立項目。訂閱網址則保留了取得清單的入口,執行更新時可以重新取得目前清單;但訂閱並非持續推送,清單是否變更取決於回傳內容與更新是否成功。

[Encoding] Base64、百分比編碼與分隔符號

Base64 是編碼,不是加密。取得分享連結的人通常能還原其中的密碼或 UUID;訂閱 URL 中的 token 也應視為憑證妥善保管。不要將完整連結、QR Code 或解碼結果交給陌生網站處理。排查時只記錄欄位是否存在,並遮蔽敏感內容。

符號或編碼常見用途檢查方式
://分隔 scheme 與後續內容保留半形符號,不要插入空格或換行。
@分隔憑證與主機部分密碼中的字面字元 @ 通常須寫成 %40。
? 與 &引入並分隔查詢參數複製原始連結,避免將網頁原始碼中的 & 誤當成參數分隔符號。
#引入 fragment,常用於備註備註中的空格可編碼為 %20,不會用於伺服器驗證。
Base64包住憑證、JSON 或訂閱本文分辨標準與 URL-safe 字元集,不要盲目解碼整條 URI。

標準 Base64 可能包含 +、/ 和結尾的 =;URL-safe 格式可能使用 - 與 _,部分實作也會省略末尾填充字元。百分比編碼處理的是另一層語法,例如 %2F 代表斜線。兩種編碼不能互換,也不能將所有 + 都替換成空格。

[Check]

先依照對應格式找出編碼區段,再解碼一次。將 %2F 二次編碼成 %252F,或把整條連結中的分隔符號都編碼,都會改變解析結果。

[Shadowsocks] ss:// 的憑證與伺服器欄位

常見的 SIP002 格式會將加密方法與密碼編碼在 userinfo 中,伺服器位址和連接埠則維持可讀。以下範例中的 Base64 內容為 aes-128-gcm:test,其中 test 只是示範密碼。連接埠 8388 僅為範例,並非 Shadowsocks 的固定連接埠。

ss://[email protected]:8388#Demo%20SS
  1. scheme:ss 指定 Shadowsocks,匯入後不應改成其他協定。
  2. userinfo:解碼後可得加密方法 aes-128-gcm 與密碼 test,兩者以冒號分隔。
  3. 主機與連接埠:example.com:8388 表示連線目標;實際使用時必須與使用者已有的參數一致。
  4. 備註:Demo%20SS 解碼後為 Demo SS,僅供辨識項目。

舊式分享格式也可能將包含主機與連接埠的整段內容一併做 Base64 編碼,因此並非每條 ss:// 連結都會出現可讀的 @example.com。含有 plugin 參數的連結,也需要確認外掛及其選項;辨識出 Shadowsocks,不代表附加傳輸參數一定完整。若使用 IPv6 字面位址,主機部分通常會以方括號括住,避免與連接埠分隔冒號混淆。

[VMess] vmess:// 常見的 Base64 JSON 格式

常見的 vmess:// 分享格式,是在 scheme 後放置經 Base64 編碼的 JSON。以下展示的是解碼後的範例,並非可直接貼上匯入的完整 URI。欄位值刻意採用虛構網域與示範用 UUID,重點在於辨識各欄位的用途。

{
  "v": "2",
  "ps": "Demo VMess",
  "add": "example.com",
  "port": "443",
  "id": "00000000-0000-4000-8000-000000000001",
  "aid": "0",
  "scy": "auto",
  "net": "ws",
  "type": "none",
  "host": "example.com",
  "path": "/demo",
  "tls": "tls",
  "sni": "example.com"
}

JSON 中的 v 是分享格式欄位,不是 Shadowrocket 的 App 版本;ps 是備註,不是密碼。不同匯出實作可能採用不同欄位組合,不能將這份範例視為所有 VMess 連結的唯一格式。若匯入後協定正確但路徑遺失,應回到節點編輯頁檢查傳輸參數,而不只是確認 UUID。

[VLESS / Trojan] 可讀 URI 中的驗證資訊與 TLS

VLESS 與 Trojan 常見的分享格式都採用可讀的 URI 結構,但 @ 前方憑證的意義不同:VLESS 通常使用 UUID,Trojan 通常使用密碼。VLESS 本身不提供等同 TLS 的傳輸加密;本例以 security=tls 描述 TLS,不能只根據協定名稱推斷連線安全設定。

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=example.com&path=%2Fdemo&sni=example.com#Demo%20VLESS

trojan://demo%[email protected]:443?security=tls&type=tcp&sni=example.com#Demo%20Trojan

分兩層檢查:驗證欄位與傳輸欄位

驗證資訊與連線目標
  • VLESS 的 UUID:本例為完整的示範用 UUID。
  • Trojan 密碼:demo%40pass 解碼後為 demo@pass。
  • 兩個範例都連線至 example.com:443,連接埠並非固定值。
TLS 與傳輸方式
  • sni 對應 TLS 握手使用的伺服器名稱。
  • type=ws 範例還需確認 Host 與 /demo 路徑。
  • type=tcp 不應照搬 WebSocket 路徑設定。

連線位址、TLS SNI 與 WebSocket Host 的用途可能各不相同;是否相同須依既有參數判斷,不能只看到網域就全部替換。

VLESS 範例中的 encryption=none 不代表本例停用了 TLS;它與 security=tls 屬於不同層次。Trojan 範例中的密碼含有特殊字元,因此對 @ 做了百分比編碼。不要為了讓連結「看起來正常」而刪除編碼,也不要透過停用憑證驗證來掩蓋 SNI 或憑證名稱不符的問題。

查詢參數的命名與延伸支援可能因分享格式的實作而異。若既有連結包含額外欄位,請保留原值,匯入後再逐項確認 Shadowrocket 節點編輯頁中的對應設定;只看到項目名稱,不能證明所有參數都已成功套用。

[Subscribe] 單一節點匯入與訂閱更新分開處理

以下訂閱網址僅用來示範 URL 結構,並非可用的服務入口。此處的 token=xxxx 是明顯的虛構值,實際網址中的 token 不應公開。一般網頁 URL 也可能以 HTTPS 開頭,只有回傳內容符合訂閱解析需求,才能用來產生節點清單。

https://example.com/sub?token=xxxx
  1. 已有單一節點連結:完整複製一條 URI,透過 App 提供的連結匯入入口處理;匯入後前往 Home 開啟該節點的編輯頁,確認類型、位址、連接埠與傳輸參數。
  2. 已有訂閱網址:前往 Home → Add Server,選擇 Subscribe,輸入已有的訂閱 URL 並儲存,再檢查訂閱群組及其中的節點清單。
  3. 既有服務參數已變更:更新訂閱群組;若是獨立匯入的項目,請重新匯入新的連結,或依新參數手動修改。
  4. 更新前有本機修改:先儲存需要保留的參數。訂閱更新可能會重新產生由伺服器管理的節點,不要把本機改名或欄位修改視為永久覆寫。

訂閱回傳內容可能是一組分享連結,也可能是整組文字經 Base64 編碼後的內容。訂閱回應編碼與單一節點內部編碼是兩個獨立處理層:外層解碼後,裡面的 vmess:// 仍可能帶有自己的 Base64 JSON。不要把訂閱本文當成單一密碼欄位,也不要將已解碼的一組連結再次串接成一條 URI。

結論:遠端參數變更時,先確認項目來源

若項目屬於 Subscribe 群組,先更新並確認回傳清單;若為獨立節點,則使用新的分享連結。反覆切換連線開關,不會重新取得獨立 URI 的最新參數。

[Routing] 匯入成功後,再確認連線與規則

匯入連結的作用是儲存連線參數,不會決定所有請求的路由方式。Home 用於查看節點與連線狀態,Config 用於管理設定,Settings 用於調整 App 設定。排查時先檢查 Home 中選取的節點,再確認 Global Routing;項目出現在清單中,不代表請求一定經由該節點傳送。

Global Routing → Config

建議

若要依照既有規則使用連線,請選擇 Config 並檢查目前生效的設定。規則通常依序比對,最終路徑取決於命中的策略。

適用情境:已有設定,需確認日常規則分流

Global Routing → Proxy

用於暫時檢查代理路徑,避免將 Config 中符合直連規則的結果誤認為節點無法使用。測試完成後,請恢復原本的使用模式。

適用情境:排除規則影響,確認所選節點的連線狀態

Global Routing → Direct

此模式採用直連路徑,不能用來證明剛匯入的代理節點是否可用。直連時能開啟網頁,與該節點驗證成功是兩回事。

適用情境:對照本機網路的直接連線狀況

Global Routing 中的 Scene 應依已設定的場景進行確認,不能直接視為 Proxy 或 Config。以下是用來理解順序的 [Rule] 片段,並非完整設定,也不應直接覆寫現有檔案。網域與 IP 網段皆為示範內容。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

Settings → On Demand 用於管理依條件觸發連線的行為,無法取代節點驗證,也不能修復錯誤的 URI。若目前只要確認匯入結果,請先確認連線是否已建立、選取的節點是否正確,再檢查自動觸發條件,避免同時變更多個變因。

[Troubleshooting] 分享連結解析與更新常見問題

複製了連結,為什麼沒有匯入節點?

先確認開頭是否為完整的 scheme,再檢查複製內容是否包含說明文字、引號、空格或通訊軟體插入的換行。只複製一條完整 URI;若來源提供的是 HTTPS 訂閱網址,應透過 Subscribe 處理,不要當成單一節點密碼貼上。

節點已經出現,為什麼還是連不上?

前往 Home 確認所選節點的位址、連接埠與驗證資訊,再檢查 TLS SNI、WebSocket Host 和路徑。接著確認 Global Routing;Direct 模式下的連線結果無法驗證代理節點。若參數與既有服務資料一致,請繼續檢查伺服器狀態,不要隨意更改協定類型。

訂閱更新後變成空白,原本的連結還能用嗎?

先保留原始訂閱網址,確認 token 與查詢參數完整,再確認回傳內容是節點資料,而不是登入頁面、錯誤頁面或空白回應。舊節點是否仍可連線,取決於伺服器是否繼續接受舊參數,不能只因清單為空就下結論。

分享訂閱中的單一節點,對方也會自動更新嗎?

通常不會。分享單一節點取得的是目前參數快照,不包含原訂閱的更新關係。只有儲存並更新對應的訂閱入口,才有機會取得遠端清單的變更;分享前也應確認有權公開其中的驗證資訊。

修改連結中 # 後面的名稱,會影響連線嗎?

在本文展示的 URI 格式中,fragment 用於備註;修改名稱不會更換伺服器位址、密碼或 UUID。若修改後無法匯入,請檢查是否誤刪前面的參數,或將備註中的特殊字元寫成未編碼的分隔符號。

最後依序檢查「連結類型 → 編碼完整性 → 驗證欄位 → 傳輸與 TLS → 目前路由模式」。每次只修改一項,並記錄原值。這有助於區分解析失敗、伺服器拒絕、TLS 驗證失敗與規則未經代理等問題,避免反覆重新匯入而掩蓋真正原因。

App Store 正版查核