小村軟體有限公司
第 7 章

綜合演練 — 從案例解讀 HTTP 的對話

對模擬實務故障調查的 8 個案例,套用「請求了什麼・結果如何・條件與補充」的 3 點組合閱讀法,橫跨運用全部 6 章的知識。

收尾的 8 題 — 把 3 點組合套用到案例上

最終章是綜合演練。對模擬實務場景的 8 個案例,橫跨全部 6 章的知識來回答。迷惘時,回到本課程的口訣 — 請求了什麼?結果如何?條件與補充是什麼?

卡住的話回去的章
訊息的骨架・無狀態第 1 章
方法的使用區分・安全與冪等・重試第 2 章
狀態碼的分類與切分第 3 章
Host・Content-Type・Cookie 等標頭第 4 章
max-age・ETag・304・no-store第 5 章
curl 與 Network 分頁的觀察步驟第 6 章
從症狀出發,依請求行・狀態碼・標頭的順序確認並縮小原因範圍的 HTTP 故障調查 3 點組合閱讀法步驟圖

案例調查的型。從症狀出發,依請求行(請求了什麼)→ 狀態碼(結果如何)→ 標頭(條件與補充)的順序閱讀,就能縮小原因所在的一側(用戶端側 / 轉送 / 伺服器側 / 快取)。

案例 7-1 — 重新導向與表單的問題

第 2〜3 章與第 6 章的範圍。解讀轉送的連鎖與 POST 的重送。

Q1. 案例:打開 https://example.com/mypage,瀏覽器顯示「重新導向次數過多」的錯誤。用 curl -v https://example.com/mypage 觀察,發現它以 302 轉送到 Location: /login,而 /login 也以 302 轉送到 Location: /mypage。對所發生之事的正確說明是哪一個?

Q2. 案例:有使用者回報「在訂購完成頁面重新載入,出現表單重送的確認,繼續之後訂單變成兩筆」。伺服器端的定番對策是哪一個?

Q3. 案例:圖片檔的回應標頭設定了 Cache-Control: max-age=604800。這份快取能保持 fresh 的期間是幾天?

案例 7-2 — 沒反映・變亂碼・看不到

第 3〜6 章的範圍。切分快取・權限・字元編碼。

Q4. 案例:修改了 CSS 也反映到伺服器上了,自己的瀏覽器卻仍顯示舊的設計。看 Network 分頁,那個 CSS 那一行的 Size 欄顯示著 (disk cache)。原因與對策的組合,最合適的是哪一個?

Q5. 案例:在會員制網站,已登入的使用者回報「昨天還看得到的資料頁面,今天開始看不到了」。Network 分頁中對該頁面的 GET 回傳 403。從這個觀察能說的、最合適的是哪一個?

Q6. 案例:改版後的 https://example.com 頁面上,日文化成了「è±�å­�」這樣的符號串。用 curl -I 確認,回傳的是 Content-Type: text/html; charset=ISO-8859-1,而 HTML 檔案本身是以 UTF-8 儲存的。合適的對策是哪一個?

案例 7-3 — 故障的切分與重試的判斷

第 2〜3 章的總結。以 5xx 的切分與基於冪等性的重試判斷為課程收尾。

Q7. 案例:整個網站突然出錯,任何 URL 都回傳 502 Bad Gateway。構成是「反向代理 + 後面的應用程式伺服器」的 2 段式。最先調查的位置,最合適的是哪一個?

Q8. 案例:庫存管理系統中有 2 個請求逾時了。(A) PUT /items/42(把商品 42 的資訊置換成這份內容)與 (B) POST /orders(建立新的進貨單)。可以機械式地立刻重送的是哪一個?

課程的最後 — 隨身帶著往返書信的讀法

辛苦了。在本課程中背下來的項目其實非常少。取而代之希望你帶回家的,是在任何輸出面前都通用的閱讀之型。

  • 請求了什麼 — 請求行的方法與路徑。那個請託是安全的嗎、冪等的嗎
  • 結果如何 — 狀態碼從百位數讀起。先知道是誰的問題
  • 條件與補充是什麼 — Content-Type 與內容物一致嗎。Cache-Control 約定了什麼。Cookie 有附上嗎

開發者工具的 Network 分頁也好、curl -v 的輸出也好、明天起遇到的任何 HTTP 記錄也好,都一定能從這 3 點開始讀。不被壓倒,從熟悉的 3 點讀起 — 這就是你在本課程練成的能力。