示範 · 靜態庫

一個可以讓用戶端指向的庫

並不存在的遊戲、自製軟體和金手指,以 Lantern 靜態庫的形式隨本站一起提供:不需要自己的伺服器就能試用用戶端。

裡面有什麼

Nintendo Switch、New 3DS、PS Vita 和 Android 上的虛構遊戲,附有資料卡和專門繪製的圖像;適用於 Switch、3DS 和 Linux 的自製軟體,其中兩個附有簽章;Switch 格式的金手指。遊戲、工作室和人物都是虛構的。

其中的檔案是只有幾個位元組文字的佔位檔,自製軟體的壓縮檔裡只有一個 README:沒有任何軟體,也沒有任何東西可以安裝或執行。

讓用戶端指向它

把這個網址交給用戶端。它會先向網站請求 /.well-known/lantern,找不到後再讀取 lantern.json:一個帶有 static 的交握(規格 § 21),每頁四項以便用戶端遇到多頁,以及以 SHA-256 提供的每個檔案。

https://lantern.boreale.dev/demo/

lantern.json · v1/apps/switch/pages/1.json · v1/titles/switch/0100ABCD00010000.json

一致性測試套件在本站每次建置時都會檢查它,它達到了 Lantern Static:

python3 conformance/run.py --static https://lantern.boreale.dev/demo/
…
Levels reached (SPEC.md § 17, draft 0.6): Lantern Static

從瀏覽器存取

提供本站的 GitHub Pages 會為每個檔案回應 Access-Control-Allow-Origin: *:其他網站的頁面可以用 fetch() 讀取它。請求時不要帶憑證,也不要加自訂標頭(不要 Lantern-Platform:靜態庫的平台已寫在路徑裡),否則瀏覽器會先送出預檢請求,而 GitHub Pages 不會回應。

const hello = await (await fetch("https://lantern.boreale.dev/demo/lantern.json")).json();

它的交握和檔案不含任何追蹤:只有本站的頁面會統計造訪。 隱私

陷阱版本

旁邊是一些故意弄壞的靜態庫,每個只有一處問題,用來測試用戶端:與其 SHA-256 不符的檔案、跑出自身資料夾或平台根目錄的清單、較新的 schema、過大或巢狀過深的文件、無法驗證的簽章、小階金鑰。每個都寫明用戶端應該怎麼做,一致性測試套件會全部拒絕。