☀️知道这些HTTP状态码,再也不怕面试官了。
Posted °PJ想做前端攻城狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了☀️知道这些HTTP状态码,再也不怕面试官了。相关的知识,希望对你有一定的参考价值。
面试官
:说一说常见状态码代表不同的含义?💥
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
。
- 200 OK :成功状态码 ,表明请
-
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,区别在于能够
确保请求方法和消息主体不会发生改变
。
- 301 Moved Permanently :
-
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 的区别?
- 401 Unauthorized 用于
丢失或错误的身份验证
,响应头包含 www-Authenticate 来描述如何验证,通常由 Web 服务器 返回,而不是应用程序,具有暂时性
,服务器会要求重试 - 403 Forbidden 是指
已经验过身份验证,但是在某项请求资源操作上没有权限
,具有永久性
,与应用程序逻辑相关。
最后
想要真正理解 HTTP 状态码,而不是死记硬背
(虽然很像八股文),最好先过一遍下图。每个状态码都不是割裂开的,尝试带着图理解,思考收到 HTTP 请求后的整个处理流程,同时理解 HTTP 协议的 Header, 效率更高。
最后的最后
:祝大家大厂offer拿到手软',加油吧💪,攻城狮们
以上是关于☀️知道这些HTTP状态码,再也不怕面试官了。的主要内容,如果未能解决你的问题,请参考以下文章