401和403狀態碼

一、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-hant/n/330780.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LVHDD的頭像LVHDD
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相關推薦

  • Vue狀態管理——Vuex

    一、安裝和基礎配置 安裝Vuex非常簡單,只需在終端中運行如下命令: npm install vuex –save 在Vue項目中,需要將Vuex引入並通過Vue.use()使用…

    編程 2025-04-24
  • HTTP狀態碼412——前置條件失敗

    一、什麼是412狀態碼 HTTP狀態碼是客戶端與服務器進行通信時的返回碼,它表示服務器對請求的響應結果。HTTP狀態碼由3位數字表示,其中第一個數字的範圍為1-5,依次表示請求已經…

    編程 2025-04-23
  • Ubuntu防火牆狀態詳解

    一、Ubuntu防火牆狀態查詢 Ubuntu的防火牆默認為iptables,在使用前需要確認防火牆狀態是否打開。 可以使用以下命令查看防火牆狀態: sudo ufw status …

    編程 2025-04-22
  • HTTP 狀態碼101 – 切換協議

    HTTP 狀態碼101表示服務器正在切換協議。它是一個比較少見的狀態碼,但仍然在某些場景下被廣泛使用。本文將從以下幾個方面詳細介紹狀態碼101的含義、用途以及相關的實際應用。 一、…

    編程 2025-04-18
  • Kubernetes中的有狀態服務和無狀態服務

    Kubernetes(K8s)是一個容器編排工具,可以自動化容器的部署、擴展和管理。K8s通過抽象層將計算資源和服務層解耦,並為應用程序提供了一種平台無關的方式來表示和管理它們。 …

    編程 2025-04-13
  • Vuex教程:如何管理Vue.js應用程序的狀態?

    Vue.js是一個極富競爭力的JavaScript庫,因為它提供了一種靈活且易於使用的方式來創建用戶界面並與後端API進行交互。然而,它並沒有提供一個內建的、結構化的方法來管理應用…

    編程 2025-04-12
  • 查看ES集群狀態

    ES(Elasticsearch)是一個基於Lucene搜索引擎的分布式開源搜索和分析引擎。ES集群狀態是指集群的健康狀況、節點狀態、分片狀態等。在運維過程中,了解ES集群狀態是必…

    編程 2025-04-12
  • 使用Spring狀態機提升用戶體驗,更優雅地管理狀態轉換

    一、為什麼需要狀態機 在開發Web應用時,很多時候需要對用戶的狀態進行管理。例如,一個訂單會有不同的狀態,如未支付、待發貨、待收貨等等。這些狀態之間會有一定的轉換關係。為了更好地管…

    編程 2025-04-12
  • 接口狀態碼詳解

    在編程開發中,我們經常會遇到接口狀態碼這個概念,它通常代表着某個操作的結果或者某個請求的狀態。在本文中,我們將從多個方面對接口狀態碼進行詳細的闡述。 一、請求成功 當我們向後端發送…

    編程 2025-04-12
  • Vue3 狀態管理詳解

    Vue3是當下最受歡迎的前端框架之一,其中一個重要的特性就是狀態管理。在這篇文章中,我們將從多個方面詳細闡述Vue3狀態管理,包括Vuex和Composition API,以及re…

    編程 2025-04-12

發表回復

登錄後才能評論