常用 HTTP 响应状态码
HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)。状态代码由 section 10 of RFC 2616 定义。
信息响应
100 Continue
这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果请求已经完成则忽略这个响应。
客户端在 POST 较大数据到服务端之前,可以考虑先发送一个包含 Expect: 100-continue 首部的请求,询问服务端是否愿意接收数据,如果服务端返回 100 Continue 响应状态码则继续进行 POST 请求。
101 Switching Protocol
表示服务器应客户端升级协议的请求正在切换协议。
在使用 WebSockets 时会用到协议切换。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
此状态还用于在同一连接上从 HTTP/1.1 升级到 HTTP/2,你也可以使用它将 HTTP 连接转换为各种其他基于TCP的协议。
成功响应
200 OK
请求成功。默认情况下状态码为 200 的响应可以被缓存。
请求成功的含义取决于 HTTP 方法。PUT 和 DELETE 的请求成功通常并不是响应 200 OK 的状态码而是 204 No Content 表示无内容(或者 201 Created 表示一个资源首次被创建成功)。
201 Created
该请求已成功,并因此创建了一个新的资源。
202 Accepted
请求已经接收到,但还未响应,没有结果。意味着不会有一个异步的响应去表明当前请求的结果,预期另外的进程和服务去处理请求,或者批处理。适合异步任务或者需要处理时间比较长的请求,避免 HTTP 连接一直占用,出现超时的情况。
203 Non-Authoritative Information
服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK的情况下才是合适的。
204 No Content
服务器成功处理了请求,但不需要返回任何实体内容。
205 Reset Content
服务器成功处理了请求,且没有返回任何实体内容。但是与 204 响应不同,返回此状态码的响应要求请求者重置文档视图。该响应主要是被用于接受用户输入后,立即重置表单,以便用户能够轻松地开始另一次输入。与 204 响应一样,该响应也被禁止包含任何消息体,且以消息头后的第一个空行结束。
206 Partial Content
服务器已成功执行了部分 GET 请求。该请求必须包含 Range 头信息来指示客户端希望得到的内容范围,并且可能包含 If-Range 来作为请求条件。可以使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。
重定向响应
301 Moved Permanently
说明请求的资源已经被移动到了由 Location 头部指定的url上,是固定的不会再改变。搜索引擎会根据该响应修正。除非额外指定,否则这个响应也是可缓存的。
302 Found
重定向状态码表明请求的资源被暂时的移动到了由该HTTP响应的响应头Location 指定的 URL 上。浏览器会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新 (In SEO-speak, it is said that the link-juice is not sent to the new URL)。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
303 See Other
通常作为 PUT 或 POST 操作的返回结果,它表示重定向链接指向的不是新上传的资源,而是另外一个页面,比如消息确认页面或上传进度页面。而请求重定向页面的方法要总是使用 GET。
304 Not Modified
未改变,说明无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如 GET 或 HEAD 或在请求中附带了头部信息:If-None-Match 或 If-Modified-Since。
307 Temporary Redirect
临时重定向响应状态码,表示请求的资源暂时地被移动到了响应的 Location 首部所指向的 URL 上。
原始请求中的请求方法和消息主体会在重定向请求中被重用。在确实需要将重定向请求的方法转换为 GET 的场景下,可以考虑使用 303 See Other 状态码。
状态码 307 与 302 之间的唯一区别在于,当发送重定向请求的时候,307 状态码可以确保请求方法和消息主体不会发生变化。如果使用 302 响应状态码,一些旧客户端会错误地将请求方法转换为 GET。
308 Permanent Redirect
说明请求的资源已经被永久的移动到了由 Location 首部指定的 URL 上。浏览器会进行重定向,同时搜索引擎也会更新其链接。
在重定向过程中,请求方法和消息主体不会发生改变,然而在返回 301 状态码的情况下,请求方法有时候会被客户端错误地修改为 GET 方法。
客户端错误响应
400 Bad Request
语义有误,当前请求无法被服务器理解。请求参数错误。
401 Unauthorized
当前请求需要用户验证。
403 Forbidden
服务器已经理解请求,但是拒绝执行它。
404 Not Found
请求失败,请求所希望得到的资源未被在服务器上发现。
405 Method Not Allowed
请求行中指定的请求方法不能被用于请求相应的资源。
406 Not Acceptable
请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
407 Proxy Authentication Required
缺乏位于浏览器与可以访问所请求资源的服务器之间的代理服务器(proxy server )要求的身份验证凭证,发送的请求尚未得到满足。
408 Request Timeout
请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。服务器想要将没有在使用的连接关闭。
409 Conflict
表示请求与服务器端目标资源的当前状态相冲突。
冲突最有可能发生在对 PUT 请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应。
410 Gone
说明请求的目标资源在原服务器上不存在了,并且是永久性的丢失。如果不清楚是否为永久或临时的丢失,应该使用 404。
411 Length Required
服务器拒绝在没有定义 Content-Length 头的情况下接受请求。
412 Precondition Failed
服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。
这通常发生于采用除 GET 和 HEAD 之外的方法进行条件请求时,由首部字段 If-Unmodified-Since 或 If-None-Match 规定的先决条件不成立的情况下。
413 Payload Too Large
服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围。
414 URI Too Long
请求的URI 长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务。
415 Unsupported Media Type
对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝。
416 Range Not Satisfiable
如果请求中包含了 Range 请求头,并且 Range 中指定的任何数据范围都与当前资源的可用范围不重合,同时请求中又没有定义 If-Range 请求头,那么服务器就应当返回416状态码。
417 Expectation Failed
此响应代码意味着服务器无法满足 Expect 请求标头字段指示的期望值。
服务端错误响应
500 Internal Server Error
是表示服务器端错误的响应状态码,意味着所请求的服务器遇到意外的情况并阻止其执行请求。
501 Not Implemented
表示请求的方法不被服务器支持,因此无法被处理。服务器必须支持的方法(即不会返回这个状态码的方法)只有 GET 和 HEAD。
502 Bad Gateway
表示作为网关或代理角色的服务器,从上游服务器(如 tomcat、php-fpm)中接收到的响应是无效的。
503 Service Unavailable
它表示服务器尚未处于可以接受请求的状态。
504 Gateway Timeout
表示扮演网关或者代理的服务器无法在规定的时间内获得想要的响应。
505 HTTP Version Not Supported
服务器不支持请求中所使用的HTTP协议版本。