Skip to main content

Steps to resolve web application problem

· 7 min read
zaxro

判斷邏輯

網路服務會發生問題狀況有很多,以下會用樹狀圖去做個判斷邏輯,當然這是建立在我目前遇到過的各種各樣情況上,同時也會加上判斷中會使用的方法!

HTTP status 介紹

  • 1xx - 資訊性狀態碼(Informational Status Codes):表示請求已收到,並且伺服器仍在處理中.
  • 2xx - 成功狀態碼(Success Status Codes):表示請求成功被伺服器接受和處理.
  • 3xx - 重新導向狀態碼(Redirection Status Codes):表示需要進行進一步的操作以完成請求.
  • 4xx - 用戶端錯誤 : 常見有 400 請求無效,server 無法理解,404 資源不存在
  • 5xx(Server Error Status Codes)- 伺服器在處理請求時發生錯誤.

4xx 判斷過程及工具

出現 4xx 不一定全是 client 問題,因為這與你 server 端 code 可能有關係,可能今天問題是 RD 的靜態資源放錯路徑,前端拿不到,也有可能是客戶端編碼跟 API 串接方式錯誤等等.

在排查此類問題,客戶端提供的報錯節圖,url,跟網路速度都是重要判斷依據.如果明確知道問題原因,那可以直接跳階段測試,不知道原因的話建議可以以下判斷:

  1. 靜態資源未拿到: 請客戶端檢查網路環境,提供網路速度,ping 跟 traceroute 結果,是否有清 cache,server 端確認是否有此資源,跟有無 purge.
  2. 編碼問題: 這要看 server log,並請開發人員溝通.

順序問題,4xx 的問題可以從 client 端開始查到 server 端.

5xx 判斷過程跟工具

主要跟 code,hardware, app's condition,internet 都有關係,且可能彼此混雜,就 RD 覺得是 IT 設定 waf,IT 覺得是RD的程式問題. 也因此,建立判斷的過程很重要.

  1. hardware 問題,基本上有裝監控項可以看到性能就沒問題

  2. internet 問題,這邊就很複雜了,如果基本的 server 端互相 telnet 都有過,那接下來就要乖乖重投檢查了,這邊先不考慮 ICP 或雲服務商掛掉,這兩個掛掉應該很多網站都會掛,那剩下就是排查 waf.排查 waf 工具有以下

    • /etc/hosts: 綁定 DNS
    • web server 端的 curl.

排查流程

網路發出的流程會是:client請求 -> CDN -> web server轉導-> 後端程式處理

所以排查順序也可以是由外到內,client 端開始查,但通常都是並行的,就是 client 端那邊查網路連線品質,server 端也同時看服務情況跟 log.

  • 情境一: 客戶反應說他的 request 被攔截了,原因是 xxx cors.

    檢查流程:

    1. 先去 CDN 看是否被 WAF 阻擋.
    2. web server 看是否有設定 WAF 或者有設定跨域設定,及其阻擋紀錄.
    3. 後端程式規範的跨域跟安全套件.
  • 情境二: 客戶反應說他的 request 被攔截了,原因是 xxx header 的 sameorigin problem.

    檢查流程:

    1. 先去 CDN 看是否被 WAF 阻擋,如無,就綁定/etc/hosts 不走 CDN 直接到 web server ip 做測試
    2. web server 檢查是否有限定 header.
    3. 從 web server 那邊直接 curl 目標 server ip:port,ex.以下指令示範
curl -v http://10.0.0.1:92

去看請求後端時是否就有強迫帶該 header,如有就代表程式端有帶套件去加 header

  1. code 端可能用的套件,例如 js 的helmet套件.

在測試流程中發現限制,也不代表你一定要開放,例如,iframe 的內嵌就會牽涉到點擊劫持,跨站腳本攻擊(Cross-Site Scripting, XSS),內容竊取,會限制就會有他的原因.

非 4xx 或 5xx

這個判斷基本上就是看 F12 報錯項目了,看完之後的判斷,也是依據 4xx 或 5xx 類別去判斷.

小結

基本上,排查流程一定要有個順序,由外到內或內到外(看習慣),客戶端到 server 中間的所有事情都要一個一個查,剛開始可能因為經驗不足,到一半就會放棄了,像我就是XD,但隨著時間增加,看得問題也變多了,就要去紀錄不足之處,以及中間固定要做的事情!

如果排查一遍還是找不到問題,就要去想你過程可能漏掉哪些細項,哪些測試是可以做但你還沒做或不知道怎麼做的!