先分清哪些功能失效

結帳失效,不代表整個網站都要消失。選擇回應前,先把受影響功能列清:產品瀏覽、帳戶登入、建立訂單、付款返回、客服資料及 robots.txt,可能依賴不同系統。產品頁若仍正常,就應繼續提供;訂單提交若不能安全完成,便要清楚阻止該操作,避免顧客不知是否已付款或重複落單。預定維護與突發資料庫故障都可用暫時不可用的基本訊息,但預期時間及替代方法不同。決策單位應是每條路由及每個顧客動作。全站切換雖然容易做,卻可能無必要地隱藏仍有用的頁面。相反,漂亮的錯誤畫面若回傳成功狀態碼,會讓自動客戶端以為已取得原本內容。事前記錄哪些網址應繼續提供、哪些應暫時報錯、哪些需要人手替代服務,之後才能據此實作及驗收恢復。

HTTP 狀態碼要反映真實情況

RFC 9110 把 503 Service Unavailable 定義為伺服器暫時無法處理請求,例如超載或維護,並容許用 Retry-After 提示可能恢復的時間。頁面或操作確實暫時不可用時,應回傳真正的 503。原本請求的頁面沒有載入,卻顯示「維護中」並回傳 200,會造成誤導。永久移除資源屬另一項決定;個別客戶端請求過多則屬 429 情況,不等同全站故障。不要把所有失敗都轉址到首頁,否則原有出錯網址被掩蓋,客戶端也難以識別問題。應用程式、反向代理及 CDN 對外狀態碼必須一致。框架可能畫出維護元件,但上游再改變狀態碼,所以要檢查實際網絡回應,不能只看瀏覽器畫面。API 若受影響,應盡可能保留文件規定、可供機器讀取的錯誤格式。

Retry-After 只可表達合理估計

按 RFC 9110,Retry-After 可寫成等待秒數或 HTTP 日期。Google 的暫停網站指引建議 503 回應附上盡力而為的日期或時長。若預定維護已有可信的完結時間,可提供保守估計,方便客戶端安排。突發事故若無法預測,則不要給出團隊無法支持的精確承諾;如確定稍後會重新評估,可用合理的檢討間隔。這個標頭只是給自動客戶端的提示,不保證網站在指定一秒立即恢復。給人看的頁面應說明下次更新資訊的時間或聯絡支援的方法,並與已確認的恢復時刻分開。測試代理不會移除標頭,亦要防止錯誤頁被快取後在恢復時仍然顯示。已經過期的等待時間,或使用錯誤時區的絕對日期,會令客戶端混亂。誰負責估算及更新時間,應在應變安排中寫明。

提供能在故障期間運作的簡單頁面

維護頁若仍依賴同一個故障中的資料庫、登入系統或外部腳本,最需要它時也可能失效。Google Search Central 建議暫停網站時使用靜態 HTML,減少外部資源。可設計簡短頁面,由較穩定的邊緣或網頁伺服器路徑提供,包含可讀的標題、清楚內容、可用的聯絡方式,亦不可虛稱訂單已接受。若部分瀏覽功能仍可用,連結應指向那些真能開啟的功能。客服地址若也在受影響網域,須核實故障期間能否使用。除非有人能維持估計準確,否則不要放倒數計時。對訂單流程,已接受交易的伺服器證據要保留;可行時另設狀態查詢路徑或客服處理方法。故障頁只是保護顧客的輔助措施,不能代替修復事故。應在受控環境故意停用一項依賴,測試頁面仍可提供。

讓搜尋爬蟲也收到真實狀態

Google Search Central 指出短暫停站可用 503 表達,並警告不要以 403、404、410 或 noindex 代表暫時關閉。它也建議讓 robots.txt 繼續可讀,而不是對該檔案回傳 503。不過指引有界限:長時間的伺服器錯誤會減少爬取,最終可能影響索引,因此 503 不能當成長期發佈方案。短暫故障不應觸發全站移除要求或永久封鎖。要透過公開入口測試爬蟲實際可取得甚麼,包括產品網址及 robots.txt 的 HTTP 狀態碼;不能只看瀏覽器渲染出的訊息。搜尋指引也不能凌駕交易安全。若結帳停用而資訊頁仍正常,繼續提供資訊頁既方便顧客,也減少不必要的搜尋影響。重大故障後可監察爬取及索引報告,但須連同實際故障時間和受影響網址範圍一起解讀。

以結帳依賴故障作演練

假設小型零售商的付款整合突然沒有回應,但產品頁與支援頁仍正常。商戶暫停新的付款嘗試,讓付款步驟回傳清楚的暫時不可用狀態;產品頁則繼續提供原有內容和正常狀態碼,結帳動作不虛稱成功。如果較早的付款請求可能已到達供應商,顧客應看到中性的「待核實」指示及訂單查詢方法,而非立即再付款的提示。事故負責人決定受影響回應的誠實 Retry-After 政策,另行更新給人看的指示。這是虛構演練,並非某商戶真實故障的證據。它說明為何一鍵全站維護會白白移除有用的瀏覽功能,以及沒有條件的「失敗」訊息可能導致重複付款。成功標準是顧客能分清已接受訂單、結果待核實,以及確定未被接受的請求。

逐層核對對外回應

應用程式設定正確,CDN 仍可能把 503 內容當正常頁快取;邊緣規則可能把狀態碼改成 200,API 閘道也可能回傳另一種錯誤格式。應由私人網絡以外,用真正的 GET 請求測試代表性網址,記錄正常資訊頁、受影響 HTML 頁、受影響 API 操作及 robots.txt 的狀態碼、標頭、內容及快取行為。HEAD 請求有用,但不能作唯一測試,因為部分系統對 HEAD 與 GET 的處理不同。轉址也要逐一追查,免得測試把最終頁面成功誤判成原操作健康。適用時要測試匿名及登入路徑,同時避免把測試帳戶或顧客資料寫入公開日誌。即使網絡正確回傳 503,服務工作者或瀏覽器快取也可能顯示舊頁,因此還要用全新工作階段檢查。驗收矩陣應精簡,事故期間才真的跑得完。

按路由證明服務已恢復

恢復服務不只是移除維護橫幅。先確認故障依賴已健康,再經公開路徑測試代表性讀取、安全的測試寫入,以及付款或訂單結果查詢。原受影響網址應重新回傳預期內容和狀態碼;備用 503 及臨時 Retry-After 亦應消失。曾提供錯誤頁的各層快取要清除或到期,否則來源系統恢復後,部分顧客仍可能看到舊錯誤。只有團隊能對帳待核實嘗試,並觀察新交易完成,才重新開放真實交易。檢視受影響顧客動作的日誌,向客服提供範圍清楚的跟進個案,但不能假設每次錯誤頁瀏覽都等於棄單。最後持續監察同一組故障網址的錯誤率和狀態碼。這樣才能把最初宣告的故障範圍,與真正恢復服務的證據連起來。

在下一次事故前演練

維護開關應有指定負責人、啟用測試及撤回測試。把路由矩陣及示例回應放在操作手冊旁,並設明確方法更新顧客文字。演練時分別模擬付款依賴失效及較廣泛的應用故障;兩者不應令每個網址都產生完全相同的結果。核實客服仍可聯絡、顧客不會意外重複提交交易,以及監察系統看到的狀態與公開客戶端一致。演練後修正應用程式、代理、CDN 及瀏覽器之間的落差。記下開關啟用時間、受影響網址範圍、實際觀察的狀態碼及正常回應恢復時間。這些才是演練所得的營運觀察,不是籠統承諾故障毫無影響。小企業毋須為此建造複雜的狀態平台,但必須有一條在壓力下也能執行、對顧客如實交代的回應路徑。

正式採用前的核對

  • 核對受影響網址的公開 HTTP 狀態碼,而非只看畫面。
  • 仍能運作的資訊頁及 robots.txt 應保持可用。
  • 宣告恢復前核對待核實交易及錯誤頁快取。

資料來源及延伸閱讀