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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
LVHDDLVHDD
上一篇 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

发表回复

登录后才能评论