Skip to content

一文搞懂常见状态码

1.常见状态码的含义:401、400、301、302、500 等

以下是给出的状态码的含义:

  1. 401 Unauthorized(未授权): 当客户端请求需要身份验证的资源时,但提供的凭据无效或缺失时,服务器会返回 401 状态码。这通常用于要求用户进行登录或提供有效凭据。
  2. 400 Bad Request(错误的请求):服务器无法理解客户端发送的请求或请求参数不符合服务器的要求时,会返回 400 状态码。这可能是由于语法错误、无效数据等引起的。
  3. 301 Moved Permanently(永久重定向): 当资源的 URL 已永久更改,并且客户端请求的 URL 已被重定向到新的 URL 时,服务器会返回 301 状态码。客户端应该更新书签和链接以使用新的 URL。
  4. 302 Found(临时重定向): 类似于 301,但 302 状态码表示请求的资源已被暂时移动到另一个位置。服务器会在响应头中包含一个 Location 头部,指示客户端应该重定向到新的 URL。
  5. 500 Internal Server Error(服务器内部错误): 当服务器在处理请求时遇到无法处理的错误,会返回 500 状态码。这表示服务器出现了一些意外情况,可能是代码错误、配置问题等。

这些状态码是 HTTP 协议中的一部分,用于在客户端和服务器之间传递关于请求和响应状态的信息。不同的状态码表示不同的情况和错误类型。

100 系列的?

100 系列状态码通常不是最终的响应状态,而是在请求处理过程中提供的中间状态信息。正常情况下,服务器会在处理完成后返回 200 系列或其他适当的响应状态码。

2.按照系列说明状态码的含义

HTTP 状态码按照系列分为五个主要类别,每个类别代表了不同的响应情况。以下是常见的 HTTP 状态码系列以及它们代表的意思:

  1. 1xx - 信息性响应(Informational Responses): 这些状态码表示请求已被接收,服务器正在处理,或者需要进一步操作。这是一种临时的响应。

    • 100 Continue:服务器已接收请求头,客户端应继续发送请求体。
    • 101 Switching Protocols:服务器将切换到新的协议。
  2. 2xx - 成功响应(Successful Responses): 这些状态码表示请求已成功被服务器接收、理解和处理。

    • 200 OK:请求已成功。
    • 201 Created:请求已经被实现,新资源已经创建
    • 204 No Content:服务器成功处理请求,但没有返回任何内容
  3. 3xx - 重定向(Redirection Responses): 这些状态码表示客户端需要采取进一步的操作来完成请求。

    • 301 Moved Permanently:资源已永久移动到新位置,永久重定向

    • 302 Found:资源临时移动到不同位置,临时重定向

    • 304 Not Modified:客户端已经执行了条件 GET 请求,但文件未被修改

      304 的详解

      HTTP 状态码 304 是表示 "Not Modified",它用于指示客户端请求的资源自上次请求之后没有被修改过。这意味着服务器端的资源没有发生变化,客户端可以使用缓存副本,从而避免重新下载资源,从而提高性能和节省带宽。

      当客户端发出一个带有条件的请求(例如,使用条件请求头如 If-None-MatchIf-Modified-Since 等),服务器会检查请求中提供的条件,并与服务器端的资源进行比较。如果资源没有发生变化,服务器会返回状态码 304,表示资源未修改,并且不会返回实际的资源内容。相反,客户端可以使用其缓存副本。

      这个过程通常被称为 "命中缓存",因为客户端的请求命中了服务器端的缓存策略。虽然客户端会发送请求到服务器,但服务器不会返回资源内容,而是告诉客户端可以使用其缓存的版本。这样可以减少网络流量和服务器负载,同时提供更快的响应时间。

      总之,HTTP 状态码 304 表示资源未修改,客户端可以继续使用缓存的版本,从而避免重新下载资源。这对于优化性能和减少网络流量非常有用。

      304 通常可以配合协商缓存来使用

      HTTP 状态码 304(Not Modified)通常与协商缓存一起使用。协商缓存是一种机制,用于在客户端和服务器之间协商确定是否使用缓存的副本。它使用一些条件请求头,如 If-None-MatchIf-Modified-Since,来判断服务器端资源是否发生了变化。

      当客户端发送一个带有条件请求头的请求到服务器时,服务器会检查资源的状态,如果资源自上次请求后没有发生变化,服务器将返回状态码 304,表示资源未修改,客户端可以继续使用缓存的版本。

      以下是一些常见的条件请求头,用于协商缓存:

      1. If-None-Match:客户端发送的资源的 ETag 值(资源的唯一标识符)。服务器将比较客户端提供的 ETag 和当前资源的 ETag,如果相同,则返回状态码 304。
      2. If-Modified-Since:客户端发送的资源的最后修改时间。服务器将比较客户端提供的时间和当前资源的最后修改时间,如果相同或更早,则返回状态码 304。

      使用 axios 进行 ajax 请求时判断返回值状态码的方法

      在使用 Axios 进行 AJAX 请求时,你可以通过查看响应对象的 status 属性来获取服务器返回的状态码。然后,你可以检查该状态码是否为 304,以判断是否命中了缓存。

      以下是一个使用 Axios 进行 AJAX 请求的示例,演示了如何判断状态码是否为 304:主要就是通过 response.status 获取状态码

      注意:这里通常可以写在 axios 封装函数里面,判断状态码,实现相应的效果

      js
      const axios = require("axios");
      axios
        .get("your_api_endpoint_here")
        .then(function (response) {
          if (response.status === 200) {
            console.log("Request successful", response.data); // 请求成功,状态码为 200
          } else if (response.status === 304) {
            console.log("Resource not modified, using cache"); // 请求成功,但资源未修改,状态码为 304
          } else {
            console.log("Request failed with status: " + response.status); // 请求失败
          }
        })
        .catch(function (error) {
          console.log("Request failed:", error);
        });
  4. 4xx - 客户端错误(Client Error Responses): 这些状态码表示客户端似乎有错误,例如请求了不存在的资源、没有权限等。

    • 400 Bad Request:错误的请求。服务器无法理解客户端发送的请求
    • 401 Unauthorized:未授权。请求要求身份验证,但客户端没有提供有效的凭据
    • 403 Forbidden:禁止访问。服务器拒绝请求。
    • 404 Not Found:请求的资源不存在。
  5. 5xx - 服务器错误(Server Error Responses): 这些状态码表示服务器在处理请求时出现错误。

    • 500 Internal Server Error:服务器遇到了错误,无法完成请求。服务器在处理请求的过程中发生了错误。
    • 502 Bad Gateway:错误的网关服务器作为网关或代理,从上游服务器接收到无效的响应。 ——> 网关消息接收到了,但是是错误的
    • 503 Service Unavailable:服务不可用。服务器暂时过载或维护中,无法处理请求。
    • 504 Gateway Timeout:网关超时。服务器作为网关或代理,未及时从上游服务器接收到响应。——> 网关消息没接收到,超时了

这些状态码系列提供了关于请求和响应状态的重要信息,有助于开发人员识别和处理不同情况下的问题。

3.列出所有状态码大合集

HTTP 状态码用于表示 HTTP 请求的处理结果。以下是一些常见的 HTTP 状态码:

  1. 100 Continue:服务器已接收请求头,客户端应继续发送请求体
  2. 101 Switching Protocols:服务器将切换到新的协议
  3. 200 OK:请求成功。服务器成功处理了请求。
  4. 201 Created:已创建。请求成功并在服务器上创建了新资源
  5. 204 No Content:无内容。服务器成功处理了请求,但没有返回任何内容
  6. 301 Moved Permanently:资源已永久移动到新位置,永久重定向
  7. 302 Found:资源临时移动到不同位置,临时重定向
  8. 304 Not Modified:客户端已经执行了条件 GET 请求,但文件未被修改
  9. 400 Bad Request:错误的请求。服务器无法理解客户端发送的请求。——> 接收到了请求,不理解
  10. 401 Unauthorized:未授权。请求要求身份验证,但客户端没有提供有效的凭据。——> 接收到了请求,但缺少权限
  11. 403 Forbidden:禁止访问。服务器拒绝请求。——> 无法接受请求,拒绝请求
  12. 404 Not Found:未找到。服务器无法找到请求的资源。
  13. 500 Internal Server Error:服务器内部错误。服务器在处理请求的过程中发生了错误。
  14. 502 Bad Gateway:错误的网关服务器作为网关或代理,从上游服务器接收到无效的响应。 ——> 网关消息接收到了,但是是错误的
  15. 503 Service Unavailable:服务不可用。服务器暂时过载或维护中,无法处理请求。
  16. 504 Gateway Timeout:网关超时。服务器作为网关或代理,未及时从上游服务器接收到响应。——> 网关消息没接收到,超时了

注意:502 和 504 是两个网关的错误,是跳着的,中间差了一个 503 是服务器暂时不可用