状态码的职责是当客户端向服务端发送请求时,描述返回的请求的结果。

状态码分类

类别 原因短语
1xx Informational(信息性状态码) 接收的请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx Client Error(客户端错误状态码) 服务器无法处理请求
5xx Server Error(服务端错误状态码) 服务器处理请求出错

常见的14个状态码

  1. 200 OK

客户端发来的请求在服务端被正常处理了

  1. 204 No Content

服务器接收的请求已经成功处理,但是没有资源可返回,也就是返回的响应报文中不含实体的主体部分

  1. 206 Partial Content

客户端只进行了范围请求(与request headers的Range有关吧).服务器的响应报文中只包含了资源的一部分

  1. 301 Moved Permanently

永久重定向301说明请求的资源已经被移动到了由 Location 头部指定的url上,是固定的不会再改变。搜索引擎会根据该响应修正。

  1. 302 Found

302 Found 重定向状态码表明请求的资源被暂时的移动到了由Location 头部指定的 URL 上。浏览器本次会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新

几乎所有的重定向响应都会带有Location首部,浏览器接到带有Location首部的响应都会到响应的URL去看看

  1. 303 See Other

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

你用PUT或者POST上传了一张了一张图片到/cai.com/a.png这个位置,这时候服务器不想让你继续访问/cai.com/a.png这个URI而是返回303 See Other,让你用GET到/cai.com/uploadsucess.html这里然后给你展示一个“嘿恭喜你上传成功”之类的页面..

  1. 304 Not Modified

客户端使用附带的条件请求(比如请求报文的headers中包含If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中的任一首部)时,服务器端允许这个请求访问资源,但是因为资源未满足条件,所以用304状态码返回,但是不包含任何响应的主体部分。304虽然被划分在3XX但是和重定向没关系

我能想到的和304有关的就是HTTP缓存,你发一个request,带上If-Modified-Since之类的headers到服务器,如果服务器返回了304,这时候你就直接用本地的缓存好了,不需要再去接收服务端的数据,因为和你上次请求的并无差别

  1. 307 Temporary Redirect

临时重定向,和302差不多,302的标准禁止POST变换成GET,但大家都不遵守。而307则会遵守浏览器标准,不会从POST变成GET

  1. 400 Bad Request

请求报文中存在语法错误,服务器无法理解这个请求

  1. 401 Unauthorized

这个状态码表示发送的请求需要通过HTTP认证(BASIC认证、DIGEST认证)的认证信息,浏览器初次接收401时会弹出认证用的对话窗口,如果之后再收到401.就表示之前的用户认证失败

  1. 403 Forbidden

浏览器请求的资源访问被服务器拒绝了,有可能是没有获得文件系统的访问授权,又或者访问权限出现问题(从未授权的发送源IP地址试图访问)等情况都有可能导致403

  1. 404 Not Found

服务器上找不到你请求的资源。服务器也可以在拒绝请求,并且不想说明理由时使用

  1. 500 Internal Server Error

服务端在执行请求时发生了错误,服务端的web应用存在bug或者临时的故障

  1. 503 Service Unavailable

服务器暂时处于超负载或正在进行停机维护,无法处理请求。如果事先知道解除以上状况需要的时间,最好写入Retry-After首部字段再返回给客户端