此文章是对《图解HTTP》一书第四章的搬运
状态码的职责是当客户端向服务端发送请求时,描述返回的请求结果,借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。
状态码的类别
| 类别 | 原因短语 | |
|---|---|---|
| 1XX | 信息性状态码 | 接收的请求正在处理 |
| 2XX | 成功状态码 | 请求正常处理完毕 |
| 3XX | 重定向状态码 | 需要进行附加操作以完成请求 |
| 4XX | 客户端错误状态码 | 服务器无法处理请求 |
| 5XX | 服务器端错误状态码 | 服务端请求出错 |
只要遵守状态码类别的定义,即使改变RFC2616中定义的状态码,或服务器端自行创建状态码都没问题
简单来说,HTTP状态码数量加起来达60多种。但《图解HTTP》一书只讲到了经常使用的14种状态码
常用的14种状态码
| 状态码 | 含义 | 补充 |
|---|---|---|
| 200 OK | 请求已正常处理 | |
| 204 No Content | 请求处理成功,但没有资源可返回 | 不允许返回任何实体的主体。返回204响应,浏览器显示的页面不需要更新 一般在只需要客户端往服务端发送信息,而对客户端不需要发送新的信息内容时使用 |
| 206 Partial Content | 表明客户端进行了范围请求,而服务端成功执行了这个GET请求.响应报文包含由Content-Range指定范围的实体内容 | |
| 301 Moved Permanently | 永久重定向.请求的资源已经被分配了新的URI(如果把资源对应的URI保存为书签了,就要按Location首部字段提示的URI重新保存) | 一种特殊情况:当指定的资源路径的最后忘记了添加斜杠,就会产生301状态码 |
| 302 Found | 临时重定向.资源不是永久被移动,只是临时性质的.(如果把资源对应的URI保存为书签了,但不会像301那样去更新书签) | 302标准禁止POST换成GET,但是实际使用时大家都不遵守 |
| 303 See Other | 表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源 | 就是说重定向.和302的区别是客户端重定向时必须采用GET方法获取资源. |
| 304 Not Modified | 服务器允许访问资源,但未满足条件情况,不返回内容主体.但必须要客户端发送条件请求 | 304和重定向没有任何关系.客户端要发送附带条件的请求,即请求头里面包含If-xxxx的请求(包括If-Match If-MOdified-Since If-None-Match If-Range If-Unmodified-Since) |
| 307 Temporary | 临时重定向.和302一样 | 307比302严格,强制规定不能从POST变成GET.但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况 |
| 400 Bad Request | 表示请求报文中存在语法错误,需要修改好错误再次发送请求 | 浏览器会向200 OK一样对待该状态码 |
| 401 Unauthorized | ①若是第一次请求返回401,则表示发送的请求需要有通过HTTP认证的认证信息 ②若之前已进行过1次请求,则表示用户认证失败. ③返回一个401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用以质询(challenge)用户信息.当浏览器初次接受401,会弹出认证的对话窗口 | HTTP认证包括BASIC认证和DIGEST认证 |
| 403 Forbidden | 403表明对请求资源的访问被服务器拒绝了. | 服务器没有必要给出拒绝的详细理由,但可以在实体的主体部分对原因进行描述,让用户看到 |
| 404 Not Found | 表明服务器上无法找到请求的资源.也可以在服务器拒绝请求且不想说明原因的时候使用 | |
| 500 Internal Server Error | 表明服务器端在执行请求时发生了错误,也有可能是Web应用存在的bug或某些临时的故障 | |
| 503 Service Unavailable | 表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求.如果事先得知解除以上状况需要的时间,最好写入RetryAfter首部字段再返回给客户端. |