# 已知限制

本頁列出 go-web-monitor 目前版本中已確認的行為限制與缺陷，每項附上觸發條件與替代做法。

## 監控清單

| 限制 | 觸發條件 | 替代做法 |
|------|---------|---------|
| 重啟後網址格式改變 | 以 `del example.com` 刪除重啟前用 `add example.com` 加入的網站：重啟後清單載入的是正規化後的 `https://example.com`，比對不到 | 刪除時輸入完整網址，或新增時就輸入完整網址 |
| `add` 會卡住介面 | 目標無回應時，`add` 在介面執行緒上同步檢查，最多等待 HEAD 與 GET 各 10 秒 | 新增前先確認網址可連線 |
| 只有 404 觸發 GET | 伺服器以 `405` 等其他狀態碼拒絕 HEAD 時直接判定離線 | 監控支援 HEAD 的端點（如健康檢查路徑） |

## SSL 檢查

| 限制 | 觸發條件 |
|------|---------|
| `http://` 網站一律 `N/A` | 前綴未去除，主機名稱解析錯誤 |
| 自訂埠的網站一律 `N/A` | 憑證固定從 443 埠取得，且主機名稱含埠號時位址無效 |
| 只檢查葉憑證 | 中繼憑證先到期不會反映在天數上 |

## Email

| 限制 | 說明 |
|------|------|
| CC 收件者收不到信 | Cc 只寫在信件標頭，`RCPT TO` 只送給 `to` 清單，CC 地址實際上不會收到 |
| 無恢復通知 | 網站恢復上線時不寄信 |
| 告警信尾連結為舊 repo 名稱 | 信尾連結指向 `github.com/pardnchiu/web-monitor` |
| 密碼明文存放 | `.webMonitor.json` 以 `0644` 權限寫入 |

## 介面與錯誤回饋

| 限制 | 說明 |
|------|------|
| 錯誤訊息不顯示於面板 | `add`／`del`／`smtp` 錯誤以 `fmt.Printf` 輸出，會直接寫在 tview 畫面上造成殘影；`test` 與告警的寄送錯誤寫到 stderr |
| 無法設定檢查間隔 | 固定每 1 分鐘 |
| 無歷史紀錄 | 只保存最近一次結果，Uptime 是當輪比例 |

## 並行安全

狀態表 `status` 的保護不完整：`Update()` 在取鎖前讀取 `status`，`Add()`／`Remove()` 只持有讀鎖卻寫入 `status` 與 `list`，`GetStatus()` 回傳的是同一個 map 供介面迭代。背景檢查（每分鐘或 `refresh`）與 `add`／`del` 同時發生時，可能觸發 Go runtime 的 `concurrent map read and map write` 致命錯誤並結束程式。

降低風險的做法：避免在 `refresh` 或整分鐘檢查進行中執行 `add`／`del`。

## 安裝

`go.mod` 的 module 名稱為 `website-monitor`，與 GitHub 路徑不符，無法以 `go install` 安裝，見 [快速開始](/zh/getting-started)。
