为了更好地了解各个状态码代表的意思,做了一个总结,在实际的工作中,主要涉及到的还是200,404,500等。
1. HTTP状态码分5大类:
2. 100~199:信息性状态码
1XX的状态码不常用,这是HTTP/1.1引入的信息性状态码。目前已有的信息性状态码如下表:
100 Continue的目的是对这样的情况进行优化:HTTP客户端应用程序有一个实体的主体部分要发送给服务器,但希望在发送之前查看一下服务器是否会接受这个实体。当要避免客户端发送给服务器一个无法处理或使用的大实体时,发送100 Continue Expect首部给服务器,来先进行判断服务器是否能够处理。
当服务器收到了一条带有值为100 Continue的Expect首部的请求,它会用100 Continue或者一条错误码来进行响应,以告诉客户端是继续还是停止。1XX的状态码目前还不常用,不用太深入研究。
3. 200~299:成功状态码
2XX的状态码表示请求是成功的,如下表:
200 OK应该是我们见的最多的状态码了。如果你打开firebug,随便找个网站打开,应该就能看到一堆的200响应。但如果你再刷新,就有可能会看到一堆304了。其他的2XX似乎也不常见到。
4. 300~399:重定向状态码
3XX状态码告知客户端使用替代位置来访问他们所感兴趣的资源。还可以通过某些重定向状态码对资源的应用程序本地副本与源端服务器上的资源进行验证。详细的状态码见下表:
我们注意到302、303、307状态码的含义类似。这源于HTTP/1.0与HTTP/1.1应用程序对这些状态码的处理方式不同。302是HTTP/1.0中使用的,而HTTP/1.1用307来取代302实现临时重定向。
我们经常看到的应该是304 Not Modified,如果你打开firebug,访问百度,然后刷新,应该就能看到304了。这个状态码很有用,如果本地缓存没有过期,而且服务器上的资源没有修改过,就无需重复发送给客户端了,能够减轻服务器压力,节省网络流量。
5. 400~499:客户端错误状态码
4XX错误码是表示客户端这边发送的请求是错误的。服务器不能理解或者找不到请求的资源等等。详细见下表:
如果代理或其他中间应用程序有确切证据说明源端服务器会为某请求产生一个失败的期望,就可以发送这个响应状态码
我们通常会见到的是403 Forbidden,404 Not Found,415 Unsupported Media Type等几个,403一般在访问一个没有权限的svn库时会看到;404更普遍,平常访问一些老网站就有可能得到404的响应;如果你做接口测试,应该对415不是很陌生,发送的实体类型不符合接口要求,我们就会收到415。其他的400 Bad Request,405 Method Not Allowed,408 Request Timeout等几个也偶尔会看到。
6. 500~599:服务器错误状态码
有时候问题不是发生在客户端,而是服务器端出错了。这时服务器端应该给客户端发送5XX错误码,告诉客户端出现了什么问题。如下表:
5XX的响应在网上比较少见到,但如果你做开发或者测试,应该对5XX的状态码不陌生。500 Internal Server Error,做Web的同学在调试代码的时候应该会经常遇到;503 Service Unavailable,应该也不少见,如果你的服务器端用的是Apache + Tomcat,你就会发现Apache启动很快,但有时候Tomcat启动速度就容易受到你的web应用的影响了,这时你应该经常见到503的状态码。