类别 原因 描述
1xx Informational(信息性状态码) 接受的请求正在处理,协议的中间状态,还需要后续请求
2xx Success(成功状态码) 请求正常处理完毕,表示请求成功
3xx Redirection(重定向状态码) 请求正常处理完毕,表示请求成功
4xx Client Error(客户端错误状态码) 请求正常处理完毕,表示请求成功
5xx Server Error(服务器错误状态码) 请求正常处理完毕,表示请求成功

常用状态码:

●101 切换请求协议,从 HTTP 切换到 WebSocket

●200 请求成功,有响应体

●301 永久重定向:会缓存

●302 临时重定向:不会缓存

●304 协商缓存命中

●403 服务器禁止访问

●404 资源未找到

●400 请求错误

●500 服务器端错误

●503 服务器繁忙

1.2XX(Success成功状态码)

状态码2XX表示请求被正常处理了

(1)200 OK

200 OK表示客户端发来的请求被服务器端正常处理了

(2)204 No Content

该状态码表示客户端发送的请求已经在服务端正常处理了,但是没有返回的内容,响应报文中不包含尸体的主体部分。

(3)206 Paritial Content

该状态码表示客户端进行了范围请求,而服务器端执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。

如果没有响应体,则在大多数场景下,这两种响应码完全等效,但有一种情况下,HTTP/204响应会让浏览器有不同的表现.这种情况就是当用户在浏览器窗口window或者frame/iframe框架中导航的时候.

  • 如果导航到的URL返回了一个没有响应体的HTTP/200响应,则页面将会显示一个空白文档(就是一片白色).页面的URL地址也会变成新指定的URL.
  • 如果服务器返回的是一个HTTP/204响应,当前页面不会有任何变化,就好像根本没有进行导航操作一样.页面的URL地址也保持不变.

HTTP/205响应码很少见,它类似于HTTP/204,除了页面保留在当前文档不变以外,多了一步操作,就是要清空当前文档内所有表单控件的内容.

2.3XX(Redirection 重定向状态码)

3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求

(1)301 Moved Permanently

永久重定向

该状态码表示请求的资源已经被分配了新的URL,以后应使用资源指定的URL。新的URL会在HTTP响应头中的Location首部字段指定。若用户已经把原来的URL保存为书签,此时会按照Location中新的URL重新保存该书签。同时,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。

使用场景

  • 当我们想换个域名,旧的域名不再使用时,用户访问旧域名时用301就重定向到新的域名。其实也是告诉搜索引擎收录的域名需要对新的域名进行收录。
  • 在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。

(2)302 Found

临时重定向

该状态码表示请求的资源被分配到了新的URL,希望用户(本次)能使用新的URL访问资源。和301 Moved Permanently状态码相似,但是302代表的资源不是被永久重定向,只是临时性质的。也就是说已移动的资源对应的URL将来还有可能发生改变。若用户把URL保存成书签,但不会像301状态码出现时那样去更新书签,而是仍旧保留返回302状态码的页面对应的URL。同时,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。

使用场景:

  • 当我们在做活动时,登录到首页自动重定向,进入活动页面。
  • 未登陆的用户访问用户中心重定向到登录页面
  • 访问404页面重定向到首页

(3)303 See Other

该状态码表示由于请求对应的资源存在着另一个URL,应该用GET方法定向获取请求的资源

303 See Other 状态码和302 Found状态码有着相似的功能,但是303状态码明确表示客户端应当采用GET方法获取资源。

303状态码通常作为PUT或POST操作的返回结果,它表示重定向连接指向的不是新上传的资源,而是另一个页面,比如消息确认页面或上传进度页面,而请求重定向页面的方法总是使用GET。

注意:

  • 当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会再次自动发送。
  • 301、302标准是禁止将POST方法变成GET方法的,但实际大家都会这么做。

(4)304 Not Modified

浏览器缓存相关

该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX中,但是和重定向没有关系。

带条件的请求(HTTP条件请求):使用GET方法请求,请求报文中包含(if-match、if-none-match、if-modified-since、if-unmodified-since、if-range)中任意首部

状态码304并不是一种错误,而是告诉客户端有缓存,直接使用缓存中的数据。返回页面的只有头部信息,是没有内容部分的,这样在一定程度上提高了网页的性能。

(5)307 Tempotaty Redirect

307表示临时重定向。该状态码与302 Found 有着相同含义,尽管302禁止POST变成GET,但是实际使用时还是这样做了。

307会遵守浏览器标准,不会从POST变成GET。但是对于处理请求的行为,不同浏览器还是会出现不同的要求。规范要求浏览器继续向Location的地址POST内容。

3.4XX(Client Error客户端错误代码)

4XX的响应结果表明客户端是发生错误的原因所在。

(1)400 Bad Request

该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求后的内容再次发送请求。另外,浏览器会向200 OK一样对待该状态码。

(2)401 Unauthorized

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

返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部以质询(Challenge)用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。

以下情况会出现401:

●401.1 - 登录失败。

●401.2 - 服务器配置导致登录失败。

●401.3 - 由于 ACL 对资源的限制而未获得授权。

●401.4 - 筛选器授权失败。

●401.5 - ISAPI/CGI 应用程序授权失败。

●401.7 - 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。

(3)403 Forbidden

该状态码表明请求资源的访问被服务器拒绝了,服务器端没有必要给出详细理由,但是可以在响应报文实体的主体中进行说明。进入该状态后,不能再继续进行验证,该访问是永久禁止的,并且与应用逻辑密切相关。

●403.1 - 执行访问被禁止。

●403.2 - 读访问被禁止。

●403.3 - 写访问被禁止。

●403.4 - 要求 SSL。

●403.5 - 要求 SSL 128。

●403.6 - IP 地址被拒绝。

●403.7 - 要求客户端证书。

●403.8 - 站点访问被拒绝。

●403.9 - 用户数过多。

●403.10 - 配置无效。

●403.11 - 密码更改。

●403.12 - 拒绝访问映射表。

●403.13 - 客户端证书被吊销。

●403.14 - 拒绝目录列表。

●403.15 - 超出客户端访问许可。

●403.16 - 客户端证书不受信任或无效。

●403.17 - 客户端证书已过期或尚未生效

●403.18 - 在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。

●403.19 - 不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。

●403.20 - Passport 登录失败。这个错误代码为 IIS 6.0 所专用。

(4)404 Not Found

该状态码表明服务器上无法找到请求的资源。除此之外,也可在服务器端拒绝请求且不想说明理由时使用,以下情况会出现404:

●404.0 -(无) – 没有找到文件或目录。

●404.1 - 无法在所请求的端口上访问 Web 站点。

●404.2 - Web 服务扩展锁定策略阻止本请求。

●404.3 - MIME 映射策略阻止本请求。

(5)405 Method Not Allowed

该状态码表示客户端请求的方法虽然能被服务器识别,但是服务器禁止使用该方法,GET和HEAD方法,服务器应该总是允许客户端进行访问,客户端可以通过OPTIONS(预检)来查看服务器允许的访问方法。如下

Access-Control-Allow-Methods:GET、HEAD、PUT、PATCH、POST、DETELE

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

5XX的响应结果表明服务器本身发生错误

(1)500 Internet Server Errorer

该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。

(2)502 Bad Gateway

该状态码表明扮演网关或代理角色的服务器,从上游服务器中接收到的响应是无效的。注意,502错误通常不是客户端能够修复的,而是需要途径的Web服务器或者代理服务器进行修复。

以下情况会出现502:

  • 502.1 - CGI (通用网关接口)应用程序超时。
  • 502.2 - CGI (通用网关接口)应用程序出错。

(3)503 Service Unavailable

该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上情况需要的时间,最好写入RetryAfter首部字段再返回客户端。

使用场景

  • 服务器停机维护时,主动用503响应请求。
  • nginx设置限速,超过限速,会返回503.

(4)504 Gateway Timeout

该状态码表示网关或者代理的服务器无法在规定的时间内获得想要的响应。它是HTTP1.1中新加入的。

使用场景

  • 代码执行时间超时,或者发生了死循环。