一、401狀態碼
401狀態碼是HTTP協議中的一種響應狀態碼,它表示客戶端請求需要進行身份驗證,身份驗證失敗或沒有提供憑據時將收到401響應。
常見情況下,當訪問需要許可權的頁面時,客戶端會彈出身份驗證框,供用戶輸入賬號密碼,此時客戶端會將賬號密碼打包成HTTP請求發送給服務端,服務端通過驗證後才會返回正常的響應結果。
如果客戶端提供的憑據不正確或者客戶端在沒有提供憑據的情況下試圖訪問需要驗證才能訪問的資源,服務端會返回401狀態碼,客戶端需要重新進行身份驗證。
代碼示例:
HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic realm="My Server" Content-Type: text/html <html> <head><title>401 Unauthorized</title></head> <body> <h1>401 Unauthorized</h1> <p>You are not authorized to access this page.</p> </body> </html>
二、403狀態碼
403狀態碼是HTTP協議中的一種響應狀態碼,它表示客戶端請求的資源禁止訪問。
常見情況下,403狀態碼是由服務端發生的許可權校驗錯誤引起的,服務端根據不同的業務規則判斷客戶端是否有許可權訪問資源,如果沒有許可權,服務端會返回403狀態碼。
需要注意的是,當返回403狀態碼時,與401狀態碼不同的是,客戶端並不需要重新進行身份驗證。
代碼示例:
HTTP/1.1 403 Forbidden Content-Type: text/html <html> <head><title>403 Forbidden</title></head> <body> <h1>403 Forbidden</h1> <p>Access to the specified resource has been forbidden.</p> </body> </html>
三、401和403的區別
401和403都是表示訪問被禁止,但是它們代表的含義是不同的。
401狀態碼錶示客戶端請求需要進行身份驗證,而此時客戶端未提供憑據或提供的憑據不正確,客戶端需要重新進行身份驗證。
而403狀態碼錶示客戶端請求被禁止,服務端明確告知客戶端這個請求是不被允許的,客戶端無需重新進行身份驗證。
四、錯誤排查
在實際開發過程中,當我們遇到401或403狀態碼時,需要針對具體情況進行錯誤排查。
要想解決401狀態碼問題,需要首先確認賬號密碼是否正確,其次檢查服務端身份驗證的代碼是否能夠正確調用。如果服務端沒有進行身份驗證,需要根據業務規則對介面進行修改,讓其進行身份驗證。
要想解決403狀態碼問題,需要先確認客戶端訪問的資源是否有許可權訪問,如果沒有許可權,需要根據業務規則修改介面許可權配置。
代碼示例:
服務端代碼驗證身份:
if (password != userinfo.getPassword()) { response.setStatus(401); response.addHeader("WWW-Authenticate", "Basic realm=\"My Server\""); response.setContentType("text/html"); out.println("<html><body>"); out.println("<h1>401 Unauthorized</h1>"); out.println("</body></html>"); } else { // 訪問成功邏輯 }
服務端代碼判斷許可權:
if (!checkAccess(userinfo, requestURI)) { response.setStatus(403); response.setContentType("text/html"); out.println("<html><body>"); out.println("<h1>403 Forbidden</h1>"); out.println("</body></html>"); } else { // 訪問成功邏輯 }
五、總結
401和403狀態碼是常見的HTTP響應狀態碼,它們代表不同的含義。如果我們能夠正確理解它們的語義,就可以在排除錯誤時事半功倍。
原創文章,作者:LVHDD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/330780.html