常见的http状态码

1xx(信息型状态码)

  • 100 Continue:客户端应当继续发送请求。

2xx (成功状态码)

  • 200 OK:请求成功。
  • 201 Created:请求成功并且服务器创建了新的资源。

    • 这个状态码表示请求成功并且服务器创建了新的资源。这通常是在POST请求,或是某些PUT请求之后返回的响应。
    • 返回201状态码时,响应的主体部分应该指出由哪些资源URI引用了已创建的资源,以及那些资源的最初的状态。同时,新创建的资源的URI也应该在响应的Location字段中给出。
    • 这个状态码常见于RESTful风格的API设计,在创建新资源(如用户注册,文章发布等)时,如果服务器成功创建了资源,就会返回201状态码。
    • 使用场景:

      • 假设我们有一个在线博客平台,用户可以通过POST请求创建新的博客文章。以下是一个可能的HTTP请求和响应的例子:

        1. 客户端(也就是用户的浏览器或者我们的应用)发送一个POST请求给服务器,请求的内容可能是这样的:

          POST /articles HTTP/1.1
          Host: www.example.com
          Content-Type: application/json
          Authorization: Bearer some-auth-token
          
          {
          "title": "My First Post",
          "content": "This is my first post on this blog."
          }
        1. 服务器接收到请求后,会解析请求的内容,然后在数据库中创建新的文章记录。创建成功后,服务器会返回一个HTTP响应给客户端,响应的内容可能是这样的:

          HTTP/1.1 201 Created
          Content-Type: application/json
          Location: /articles/123
          
          {
          "id": 123,
          "title": "My First Post",
          "content": "This is my first post on this blog.",
          "createdAt": "2024-05-05T12:34:56Z"
          }

          在这个响应中,状态码201表示文章已经成功创建。Location头部字段包含了新创建的文章的URI。响应的主体部分返回了新创建的文章的一些详细信息,如ID,标题,内容和创建时间等。

  • 204 No Content:无内容

    • 这个状态码表示服务器成功处理了请求,但是没有返回任何内容。如果客户端是一个用户代理(如浏览器),那么用户代理应该保持当前的文档视图,除非用户明确地刷新或者请求了新的数据。
    • 这个状态码常常在一个成功的PUT请求后或者DELETE请求后返回,以表示请求的处理已经成功,但是响应中不再需要包含实体的主体内容。例如,当你向服务器发送一个DELETE请求来删除一条记录的时候,服务器在删除完毕后,可以返回一个204状态码,告诉客户端已经成功处理了请求,但是没有额外的内容需要返回。
    • 此外,返回204状态码也是一种常见的方式,用来进行Ajax或RESTful API的轮询。客户端定期向服务器发送请求,查看是否有新的数据可用。如果没有新的数据,服务器会返回204状态码,告诉客户端没有新的内容。
    • 使用场景

      • 假设我们有一个在线博客平台,用户可以通过DELETE请求删除自己的博客文章。以下是一个可能的HTTP请求和响应的例子:

        1. 客户端(也就是用户的浏览器或者我们的应用)发送一个DELETE请求给服务器,请求的内容可能是这样的:

          DELETE /articles/123 HTTP/1.1
          Host: www.example.com
          Authorization: Bearer some-auth-token
        2. 服务器接收到请求后,会在数据库中找到ID为123的文章,并删除这篇文章。删除完成后,服务器会返回一个HTTP响应给客户端,响应的内容可能是这样的:

          HTTP/1.1 204 No Content

          在这个响应中,状态码204表示文章已经成功删除,并且没有其他内容需要返回。这就是一个使用204状态码的例子。
          这个例子中,响应体是空的。这是因为在删除资源后,服务器没有更多的内容需要告知客户端。因此,返回204状态码是最恰当的。客户端在接收到204状态码后,知道删除操作已经成功,然后可以进行后续的处理,如更新用户界面等。

3xx (重定向状态码)

  • 301 Moved Permanently:永久移动

    • 这个状态码表示请求的资源已被永久移动到新位置,请求的URL已移走,且将来任何新的请求都应使用其中返回的URI。
    • Response中应该包含一个Location URL, 以便客户端进行重定向。
    • 当服务器返回这个响应(即,资源已被移动到新的位置),客户端应该开始使用新的URL,而不是原来的那个URL。这意味着所有的链接都应该更新为指向新的URL。
    • 301是永久性重定向,意味着资源永久性地移动到了新的位置。此后,搜索引擎的蜘蛛在抓取新的内容以及建立索引时,也将使用新的URL。301重定向对于SEO是友好的,因为它将旧的网址的权重传递给新的网址。
    • 它的特点是,除非用户手动清除缓存,否则浏览器会记住这个重定向关系,下一次请求旧的URL时,浏览器就直接访问新的URL,不再向服务器请求这个重定向。
  • 302 Found:临时移动

    • 请求的URL已临时移动至其他位置
    • 它的意思是,请求的资源现在临时从不同的URI响应请求。由于这种重定向是临时的,客户端应继续使用原有的URI。
    • 在具体使用中,如果浏览器接收到302状态码,通常会自动在HTTP头部找到“Location”字段,并在那里找到新的URI,然后自动重新发送请求。
    • 需要注意的是,302状态码表示的是一种临时重定向,也就是说,这只是暂时的状态,未来用户请求的URI还有可能发生变化。如果是永久重定向,应该使用301状态码。
    • 浏览器在每次访问旧的URL时,都会向服务器发送请求,询问是否需要重定向。
  • 303 See Other:

    • 这个状态码表示由于请求对应的资源存在于另一个URI,应使用GET方法获取。当在响应中发送这个状态码后,浏览器会自动从Location字段中的URI获取资源。
    • 这常常应用在POST请求处理后的重定向上,防止表单被重复提交。比如,当你提交一个表单后,服务器处理完表单数据,然后发送一个303响应,告诉浏览器去另一个页面查看处理结果。因为303响应要求浏览器用GET方式查看,所以浏览器就不会重复提交表单。
    • 这个状态码让Web应用可以避免“重复提交”表单的问题。例如,在进行电子商务交易时,303状态码可以防止用户在刷新交易结果页面时重复提交交易。
  • 304 Not Modified:未修改

    • 客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还可以继续使用。
    • 这个状态码是在使用条件请求头字段(例如:If-Match, If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since)进行条件请求时使用的。当服务器上的资源自上次请求后未发生变化时,服务器会返回此状态码。
    • 返回304状态码时,服务器不会返回任何资源的具体内容。这样做的目的是为了利用浏览器或者其他客户端的缓存,因为如果资源没有发生变化,那么就没有必要再次传输相同的资源内容,直接使用客户端缓存的版本即可。这种方式可以提高网页加载速度,节省网络带宽。

4xx (客户端错误状态码)

  • 400 Bad Request:请求出现语法错误。
  • 401 Unauthorized:未授权,需要进行身份验证。
  • 403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求。
  • 404 Not Found:请求的资源未找到。

5xx (服务器错误状态码)

  • 500 Internal Server Error:服务器内部错误,无法完成请求。
  • 501 Not Implemented:服务器不支持当前请求所需要的某个功能。
  • 503 Service Unavailable:由于临时的服务器维护或者过载,服务器当前无法处理请求。
  • 504 Gateway Timeout:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识或者辅助服务器)收到响应。

Architecture
0 声望0 粉丝

知其然, 更要知其所以然~


« 上一篇
幂等性笔记
下一篇 »
Redis

引用和评论

0 条评论