☀️知道这些HTTP状态码,再也不怕面试官了。

Posted °PJ想做前端攻城狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了☀️知道这些HTTP状态码,再也不怕面试官了。相关的知识,希望对你有一定的参考价值。

image-20210526205628428


面试官:说一说常见状态码代表不同的含义?💥


RFC 规定 HTTP 的状态码为三位数,被分为五类:

  • 1xx: 表示目前是协议处理的中间状态,还需要后续操作。
  • 2xx: 表示成功状态。
  • 3xx: 重定向状态,资源位置发生变动,需要重新请求。
  • 4xx: 请求报文有误。
  • 5xx: 服务器端发生错误。

接下来就一一分析这里面具体的状态码。


  • 1xx: 信息性状态码。

    • 100 :接收的请求正在处理。
    • 101 : Switching Protocols。在HTTP升级为WebSocket的时候,如果服务器同意变更,就会发送状态码 101。
  • 2xx: 成功状态码。

    • 200 OK :成功状态码 ,表明请求已经成功. 默认情况下状态码为200的响应可以被缓存。
    • 201 Created :表示请求已经被成功处理,并且创建了新的资源。新的资源在应答返回之前已经被创建。
    • 202 Accepted : 表示服务器端已经收到请求消息,但是尚未进行处理。但是对于请求的处理确实无保证的,即稍后无法通过 HTTP 协议给客户端发送一个异步请求来告知其请求的处理结果。
    • 204 No Content :资源请求成功,但是没有资源可返回。响应的报文中不返回任何实体内 容。
    • 206 Partial Content :客户端对服务端的部分内容请求, 它的使用场景为 HTTP 分块下载和断点续传,当然也会带上相应的响应头字段Content-Range
  • 3xx: 重定向状态,资源位置发生变动,需要重新请求。

    • 301 Moved Permanently :永久重定向。请求的资源已经被永久分配了新的 URL,浏览器会对新的资源进行缓存(更新书签URL)
    • 302 Found :临时重定向。请求的资源已经被临时分配了新的 URL,此次请求应该请求新的 地址,浏览器对保存的缓存(书签)不会更新
    • 303 See Other :和 302 相同,但是服务端要求必须使用 Get 方法请求
    • 304 Not Modified :当协商缓存命中时会返回这个状态码,服务器资源未改变,可直接使用客户端未过期的缓存。
    • 307 Temporary Redirect : 临时重定向。类似 302,区别在于能够确保请求方法和消息主体不会发生改变
    • 308 Permanent Redirect : 永久重定向。类似 301,区别在于能够确保请求方法和消息主体不会发生改变
  • 4xx: 客户端请求错误。

    • 400 Request :请求报文中存在语法错误,需要重新修改请求报文中的内容后发送。

    • 401 Unauthorized :发送的请求需要通过 HTTP 认证

    • 403 Forbidden :客户端没有访问权限,这实际上并不是请求报文出错,而是服务器禁止访问,原因有很多,比如法律禁止、信息敏感。

    • 404 Not Found :未找到响应的资源,表示没在服务器上找到相应的资源。

    • 405 Method Not Allowed :请求方法不被服务端允许需要注意的是,GET 与 HEAD 两个方法不得被禁止,当然也不得返回状态码 405。

    • 406 Not Acceptable: 资源无法满足客户端的条件,表示服务器端不支持 Accept、Accept-Charset、Accept-Encoding、 Accept-Language header 所要求的。

    • 408 Request Timeout: 服务器等待了太长时间。

    • 409 Conflict: 多个请求发生了冲突。冲突最有可能发生在对 PUT 请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应。

    • 410 Gone : 说明请求的内容在服务器上不存在了,同时是永久性的丢失。如果不清楚是否为永久或临时的丢失,应该使用404。

    • 413 Request Entity Too Large:请求体的数据过大。表示请求主体的大小超过了服务器愿意或有能力处理的限度,服务器可能会(may)关闭连接以防止客户端继续发送该请求。

    • 414 Request-URI Too Long: 请求行里的 URI 太大。表示客户端所请求的 URI 超过了服务器允许的范围。

    • 429 Too Many Request: 客户端发送的请求过多。

    • 431 Request Header Fields Too Large: 请求头的字段内容太大。表示由于请求中的首部字段的值过大,服务器拒绝接受客户端的请求。客户端可以在缩减首部字段的体积后再次发送请求。

  • 5xx: 服务器端发生错误。

    • 500:服务器出错 ,表示所请求的服务器遇到意外的情况并阻止其执行请求。
      举例:代码语法错误;php代码运行内存超了内存限制 memory_limit;nginx config 配置错误

    • 501 Not Implemented : 表示request header 里的 method 或 Content-* 时不被服务器支持,无法被处理。另,服务器必须支持的方法(即不会返回这个状态码的方法)只有 GET 和 HEAD。501 响应默认是可缓存的。

    • 502 Bad Gateway : 错误的网关,表示作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的。
      举例: php-fpm 挂掉了

    • 503:服务器当前很忙,暂时无法响应。表示服务器尚未处于可以接受请求的状态。通常造成这种情况的原因是由于服务器停机维护或者已超载。

    • 504 Gateway Timeout : 网关超时,表示网关或者代理的服务器无法在规定的时间内获得想要的响应。

      举例:代码执行时间超时,或死循环了。


思考

401 和 403 的区别?

  1. 401 Unauthorized 用于丢失或错误的身份验证,响应头包含 www-Authenticate 来描述如何验证,通常由 Web 服务器 返回,而不是应用程序,具有暂时性,服务器会要求重试
  2. 403 Forbidden 是指已经验过身份验证,但是在某项请求资源操作上没有权限,具有永久性,与应用程序逻辑相关。

最后

想要真正理解 HTTP 状态码,而不是死记硬背 (虽然很像八股文) ,最好先过一遍下图。每个状态码都不是割裂开的,尝试带着图理解,思考收到 HTTP 请求后的整个处理流程,同时理解 HTTP 协议的 Header, 效率更高。

img


最后的最后祝大家大厂offer拿到手软',加油吧💪,攻城狮们


以上是关于☀️知道这些HTTP状态码,再也不怕面试官了。的主要内容,如果未能解决你的问题,请参考以下文章

⚡5分钟⚡熟悉面试常问状态码——再也不怕面试官刁难了

❤️五分钟结束面试,发奋图强爆肝一周,再也不怕被问到Redis了(阿里面试官给我的题库)❤️

怒刷接口测试面试100题,再不担心不能吊打面试官了

有了这些套路,面试再也不怕遇到动态规划!

干货!万字设计模式面试题,再也不需要怂面试官了!

图解红黑树原理,再也不怕面试被问到