职责

状态码是在http1.0版本加入的,目的是为了在客户端向服务端发送请求的时,描述返回的请求结果,借助状态码浏览器可以知道服务器是否正常处理了请求,还是出现了错误.

TODO:GETPOST请求的方法

组成

由三位数字及原因短语组成。如 200 OK。数字中的第一位指定了响应类别,后两位无分类。

响应类别


类别

原因短语

1XX

信息性状态码(Informational)

接收的请求

2XX

成功状态码(Success)

请求正常处理完毕

3XX

重定向状态码(Redirection)

需要进行附加操作已完成请求

4XX

客户端错误状态码(Client Error)

服务器无法处理请求

5XX

服务器错误状态码(Server Error)

服务器处理请求出错

常用HTTP状态码

只要遵守状态码类别定义,即使改变RFC2626中定义的状态码,或者服务端自行创建状态码都没问题,仅记录在RFC2616的状态码就多达40种,再加上webDAV(RFC 2518)和附加HTTP状态码(RFC6585)等扩展,数量则达到60多种。由于过多,我们每个类别只挑出常用的状态码进行说明,全部状态码请参考:

https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin

RFC(request for commits) 征求意见修订书是一个互联网技术标准文档,是有IETC(Internet Engineer Task Force--互联网工程任务组)所制定的,目前由ISOC(Internetional Society--国际互联网协会)赞助发布,现阶段RFC文件包括有通信协议,互联网规范,协议等一系列网络基础文件

1XX(信息性状态码)

描述

代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送 1xx 响应。

种类

一共3种,从100到102

常用

1XX状态码都不常用


2XX(成功状态码)

描述

代表请求已成功被服务器接收、理解、并接受。

种类

一共有8种,从200到207

常用

200 OK (请求成功)

请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。

204 No Content(请求成功无返回)

服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能通过实体头部的形式,返回新的或更新后的元信息。

206 Partial Content(范围请求)

表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求,响应报文中包含的Content-Range指定范围的实体内容,类似于 FlashGet 或者迅雷这类的 HTTP下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。

3XX

描述

这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。

种类

一共8种,从300到307

常用

301 Moved Permanently

永久性重定向,被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。

302 Move Temporarily

临时性重定向,请求的资源临时从不同的 URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。由于历史原因,用户代理可能会在重定向后的请求中把 POST 方法改为 GET 方法

303 See Other

该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。303和302有相同的功能,不同点在于303明确表示客户端应该用GET方法来请求,不管原请求是什么方法,重定向请求的方法都是 GET(或 HEAD,不常用)。

304 Not Modified

很常见的一个状态码,用来表示协商缓存,注意⚠️:304虽然在3XX类别中,但是和重定向没关系

307 Temporary Redirect

临时重定向,和302相同的含义,区别在于307会遵从浏览器标准,不允许浏览器将原本为 POST 的请求重定向到 GET 请求上。

308 Permanent Redirect

308 的定义实际上和 301 是一致的,唯一的区别在于,308 状态码不允许浏览器将原本为 POST 的请求重定向到 GET 请求上。

4XX

描述

表明客户端是发生错误的原因所在

种类

种类非常多,有二三十种

常用

400 Bad Request

401 Unauthorized

该状态码表示发送的请求需要有通过HTTP认证的认证信息,若之前已进行过1次请求,则表示用户认证失败。

403 Forbidden

该状态表明请求资源的访问被服务器拒绝了,服务端没有给出拒绝的详细理由。未获得文件系统的访问授权,访问权限出现某些问题等情况都是可能发生403的原因。

404 NOT Found

服务器上无法找到请求的资源,除此之外,也可以在服务端拒绝请求且不想说明理由时使用

5XX

描述

表明服务器本身发生了错误

种类

有十多个

常用

500 Internal Server Error

服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。

502 Bad Gateway

作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

503 Service Unavailable

由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复

504 Gateway Timeout

作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

注意⚠️:某些代理服务器在DNS查询超时时会返回400或者500错误

6XX

600 Unparseable Response Headers

源站没有返回响应头部,只返回实体内容


常见问题

301,308,302,303,307有什么区别

301和308都是永久性重定向,不同的是308遵循浏览器规范不允许将POST请求重定向为GET。

302,303,307都是临时重定向,但是303不管原请求是什么方法,重定向请求的方法都是 GET(或 HEAD,不常用),而307不允许将POST重定向为GET。

https://zhuanlan.zhihu.com/p/60669395

参考


https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin

图解HTTP