網址與存取權
每個 App 有對外網址、版本預覽網址和內網網址三種網址,可以設成公開或用密碼保護。
三種網址#
網址由網址標籤和組織名稱組成,全部使用 HTTPS。
| 網址 | 誰能打開 | 範例 |
|---|---|---|
| 對外網址 | 任何人;App 設成私人時要輸入密碼 | https://order-api--acme.hosting.agentlab.run |
| 版本預覽網址 | 拿到網址的人;App 設成私人時要輸入密碼 | 每個版本一個,列在版本旁邊 |
| 內網網址 | 只有同組織的 App,瀏覽器打不開 | https://order-api--acme.internal-hosting.agentlab.run |
網址標籤#
網址標籤在建立 App 時決定,只能用小寫英文字母、數字和連字號。標籤用過之後就留給你的組織,App 永久刪除了也不會給別人。
公開或私人#
在 App 的「設定」選擇存取權:
| 選項 | 效果 |
|---|---|
| 公開 | 任何人拿到網址都能看。 |
| 私人 | 這個 App 的每個網址(對外網址和各版本的預覽網址)都會先顯示密碼頁。 |
密碼由主控台產生,只顯示一次。弄丟了就重新產生一組。
私人 App 不經過 CDN
給幾個人審閱沒問題,但不適合承接大量流量。
從另一個 App 呼叫#
同一個組織的 App 之間,用內網網址互相呼叫:
- 只有你組織的 App 能從平台內部呼叫。其他組織、建置過程和網際網路都呼叫不到。
- 憑證是公開信任的,一般的 HTTP 用戶端不用額外設定。
- 呼叫會打到目前上線的版本。
- 內網網址不會顯示密碼頁。需要保護的端點,請在程式裡自己檢查。
從內網網址進來的請求會帶 X-Franky-Caller-App 標頭,值是發出請求的 App 的網址標籤。只有在 Host 是內網網域時才信任它:
const internal = req.headers.host?.endsWith(".internal-hosting.agentlab.run");
const caller = internal ? req.headers["x-franky-caller-app"] : undefined;
if (req.url.startsWith("/admin") && caller !== "billing-worker") {
res.writeHead(403).end();
return;
}