HTTP有哪些状态码?

380 阅读4分钟

此文章是对《图解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 Forbidden403表明对请求资源的访问被服务器拒绝了.服务器没有必要给出拒绝的详细理由,但可以在实体的主体部分对原因进行描述,让用户看到
404 Not Found表明服务器上无法找到请求的资源.也可以在服务器拒绝请求且不想说明原因的时候使用
500 Internal Server Error表明服务器端在执行请求时发生了错误,也有可能是Web应用存在的bug或某些临时的故障
503 Service Unavailable表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求.如果事先得知解除以上状况需要的时间,最好写入RetryAfter首部字段再返回给客户端.