HTTP常见状态码

1.1 临时响应—1xx

表示临时响应并需要请求者继续执行操作的状态码。

状态码 简单解释 详细解释
100 继续 请求者应当继续提出请求。表示已收到请求的第一部分,正在等待其余部分。
101 切换协议 请求者已要求服务器切换协议,服务器已确认并准备切换。

1.2 成功—2xx

表示成功处理了请求的状态码。

状态码 简单解释 详细解释
200 成功 服务器已成功处理了请求
201 已创建 请求成功并且服务器创建了新的资源
202 已接受 服务器已接受请求,但尚未处理
203 非授权信息 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204 无内容 服务器成功处理了请求,但没有返回任何内容。
205 重置内容 成功处理了请求,但没有返回任何内容。此响应要求请求者重置文档视图
206 部分内容 服务器成功处理了部分 Get 请求

1.2.1 200状态码

请求已成功,请求所希望的响应头或数据体将随此响应返回。即返回的数据为全量的数据,如果文件不通过 GZIP 压缩的话,文件是多大,则要有多大传输量。

1.3 重定向—3xx

要完成请求,需要进一步操作。通常,这些状态码用来重定向。

状态码 简单解释 详细解释
300 多种选择
301 永久移动 请求的网页已永久移动到新的位置
302 临时移动
303 查看其它位置
304 未修改
305 使用代理
307 临时重定向

1.3.1 301 状态码

Moved Permanently 永久重定向。

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

1.3.2 302 状态码

Found 临时重定向。

请求的资源现在临时从不同的 URL 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在 Cache-Control 或 Expires 中进行了指定的情况下,这个响应才是可缓存的。

字面上的区别就是 301 是永久重定向,而 302 是临时重定向。301 比较常用的场景是使用域名跳转。302 用来做临时跳转比如未登陆的用户访问用户中心重定向到登录页面。

1.3.3 304 状态码

如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码

304 状态码不应该认为是一种错误,而是对客户端有缓存情况下服务端的一种响应。

整个请求响应过程如下:

客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified,那么在请求中会包含 If Modified Since,这个时间就是缓存文件的 Last Modified。因此,如果请求中包含 If Modified Since,就说明已经有缓存存在客户端。服务端只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200

对于静态文件,例如:CSS、图片等,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。

因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中添加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或 304。

1.4 请求错误—4xx

状态码 简单解释 详细解释
404 未找到

1.5 服务器错误—5xx

状态码 简单解释 详细解释
500 服务器内部错误 服务器遇到错误,无法完成请求