关于 HTTP 状态码

272 阅读5分钟

1、1XX

信息响应:表示响应已被服务端接收、理解,但还需做进一步处理,该类型状态码往往是临时性的,因为马上将会变为以下状态之一:成功(2xx)、重定向(3xx)、异常或错误(4xx或5xx)

2、2XX

请求成功:表示客户端发送的请求已成功被服务端接收、理解、接受

  • 200 - 成功:标准的 HTTP 请求响应成功状态码,get 请求中,响应将包含与请求对应的实体,post 请求中,响应将包含实体的描述或实体的操作结果。
  • 202 - 已接受请求:服务端接受了请求,但还没处理,最终可能会成功、或不会被执行或禁止执行
  • 204 - 无内容:服务端成功处理了请求,但没返回任何内容。比如,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。
  • 205 - 重置内容:服务端成功处理了请求,但没返回任何内容,区别于 204 的是:该响应要求客户端重置文档视图。
  • 206 - 部分内容:服务端成功处理了请求的部分内容,该状态码一般用于 HTTP 下载工具的断点续传功能或多个下载的分段进行(如迅雷下载)

3、3XX

重定向:表示客户端需要采取进一步的操作才能完成请求,该状态码常用于URL重定向,后续的请求地址在本次响应的 Location 域中指明

  • 301 - 永久重定向:被请求资源已被永久的转移到新位置,并且将来对此资源的引用都应该使用它返回的 URI 之一,新的永久性 URI 将在 Location 域中返回。就是说:永远也别来烦我,去找 XX 吧。
  • 302 - 临时重定向:由于移动是临时的,客户端以后还是用原来的地址发送请求,新的临时 URI 将在 Location 域中返回
  • 303 - 看其它:请求的地址已经被移动,请求的对应地址可以在另一个 URI 上被找到。该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。
  • 304 - 未修改:表示当前资源的版本在根据请求头的 If-Modified-Since、ETag、If-None-Match 参数判断缓存后,资源未曾被修改,这样客户端不需要重新传新资源,客户端仍然使用上次下载的资源复件,也就是 http 缓存中的协商缓存

4、4XX

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

  • 400 - 错误请求:明显的客户端错误请求(如:语法缺陷,请求包过大、无效的请求消息片段、欺诈性请求路由)。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。
  • 401 - 未授权:类似于 403 Forbidden 错误,但不同的是该错误是指在特定的认证情况下,用户未能通过认证(如:登陆认证)
  • 403 - 已拒绝:该请求已被服务器验证为有效,但是服务器拒绝了它的操作,一般是因为用户没有取得对应资源的使用权。
  • 404 - 未找到:表明服务器上无法找到请求的资源。
  • 405 - 方法不被允许:该请求方法不支持对需请求资源的访问。如:明明是需要 post 方法的,你却给我传了个 get 方法
  • 406 - 请求无法接受:请求资源的内容格式无法满足请求头中的要求,因而无法生成响应体,故无法接受,请求的格式由 Content-type 头重定义的媒体类型决定
  • 408 - 请求超时:客户端没有在服务器预备等待的时间内完成一个请求的发送,客户端可以随时再次提交这一请求而无需进行任何更改。
  • 409 - 冲突:因为请求存在冲突无法处理,比如多人在线编辑工具出现的冲突

5、5XX

表示服务端无法完成请求,该状态表示服务端在处理请求的过程中发生了错误或异常

  • 500 - 内部服务错误:通用错误消息,服务端遇到了一个未曾预料的情况(如:服务端可能没有使用 try catch 等错误处理机制来抓到并处理错误异常),无法给出更具体的错误消息来解释 —— 我的错,但我不知道我错哪了
  • 501 - 请求无法实现:服务端不支持当前请求中所需的某个功能。
  • 502 - 损坏的网关:作为网关或代理工作的服务端尝试执行请求时,从上游服务器接收到无效的响应。
  • 503 - 服务不可用:服务器可能暂时处于超负载或正在进行停机维护,导致服务端无法处理请求,该状况只是暂时的,并且会在一段时间后恢复,如果能预计延迟时间,那么响应中包含一个 Retry-After 头来标明延迟时间