iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
自我挑戰組

30天 IIS 面面觀系列 第 23

Day23. 比24更好笑的笑話 - Http error and related instruction

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20221007/20142057HHfqVmN6Ox.png

:派大星

:幹嘛

:我想到比24還要好笑的笑話

:說來聽聽

:500

https://ithelp.ithome.com.tw/upload/images/20221007/20142057moLzBMaXdm.png

好的,我知道很多工程師看到這種頁面都笑不出來。在處理和 HTTP Request 有關的東西總是逃不出和 HTTP status code 打交道,這些神秘數字不懂的人一頭霧水,懂數字的人,數字就會幫助你。

HTTP status code 的中文叫做 HTTP 狀態碼,但有些詞真的比較少人講中文,通常我們就會直接說 Status code。 Status code 代表的是一次 HTTP 的請求發出後,用戶端要求瀏覽網頁資源,網頁(Server)端會回傳對應狀態碼來表示這次請求的狀況,基本為三位數字。

HTTP status code 可以分為五大類:

  • 100開頭:訊息提示(Informational),暫時的狀態,請求仍在被繼續處理
  • 200開頭:成功(OK),請求已被接受
  • 300開頭:重新導向(Redirection),用戶端須依指示重新採取新的操作才能完成,如訪問另一個位址
  • 400開頭:用戶端錯誤(Client Error),用戶端發生了一些錯誤致使無法正常處理該 Request,常見的包含訪問位址不存在 404,權限不足 403 等等
  • 500開頭:伺服器端錯誤(Server Error),伺服器端發生了一些問題,目前無法正常處理該 Request,最常看到的大概就是 500 了,Internal Server Error,發生了內部錯誤,具體是什麼錯誤,還得伺服器維護者看進去才能知道

在 IIS 中,前面的截圖裡大家應該常看到內部錯誤頁面會顯示 HttpStatusCode.SubStatusCode 這樣的組合,我也多次提到 Sub status code這個詞。Sub status code 是 IIS 專門使用來進一步列出各種情況的詳細代碼,官方是有文件可以查詢的。

HTTP status code overview 一文裡就詳細的介紹了 IIS 中所有基本模組可能遇到的所有 Status code 組合,在你有了 Status code 後來找這篇文章,基本你能拿到一定資訊。獲取 Status code 在沒有開啟 Detail Error Page 的狀況下,就得從 IIS Log 來翻找,後面會提到。

如我上面的截圖的錯誤是 500.19,對照文件的錯誤描述是 Configuration data is invalid,設置文件有誤,該錯誤是我刻意改掉了一個角括號造成的。像透過這種方式,就能夠更貼近一些問題狀況。

400 和 500 兩種代表錯誤的 Status code 情況不一定單純,有可能是複合問題造成的錯誤,官方針對 400 / 500 兩種狀態碼都有提供對應的 Trouble Shooting Guide。

HTTP 400 error responses to HTTP requests

HTTP Error 500.0 error

儘管可能寫的比較通用,有些思路還是能參考,畢竟有問題的時候多一個能參考的可能性也是很必要的。

這裡借一張官方的圖(from How to Use HTTP Detailed Errors in IIS 7.0)來描述一下 HTTP status code 模組的設定邏輯:

https://ithelp.ithome.com.tw/upload/images/20221007/20142057azMQ2cupDy.png

httpError Module 收到 RQ_SEND_RESPONSE 事件後觸發處理流程,首先判斷狀態碼是否大於 400,大於等於才是錯誤,小於則直接返回。接下來判斷是否要顯示客製化的錯誤頁面,會根據你在 Error Pages 模組裡設定的來判斷當前是否要顯示細節,如需顯示細節,會需要更進一步的判斷,如 ASP.NET 可能會吐一些 call stack;如果是要顯示客制頁面,會去尋找設定檔中是否有針對該錯誤做錯誤頁面設定,有的話顯示對應位址,沒有則顯示單行的錯誤碼訊息(系統預設的 htm 檔案)。

關於 Http status code 的基本大概上面這些就足夠了,實際問題發生往往需要更深入的察看才能知道真的有問題的地方。也別忘了做好錯誤碼的客製頁面處理,儘管錯誤內容對除錯和修復網站來說很重要,但意外地暴露過多錯誤訊息,可會讓有心人抓到網站的漏洞。


上一篇
Day22. 證書通常都很重要,就像畢業證書 - Server Certificates, SSL Settings
下一篇
Day24. 凡走過必留下痕跡 - Logging, IIS Log
系列文
30天 IIS 面面觀30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言