首先先说一下HTTP常见的请求过程。
HTTP(Hypertext transfer protocol)超文本传送协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据,于应用层的面向对象的协议。
基本流程:客户端(用户代理)给服务器发送请求,服务器对请求端发送响应的格式。大部分的HTTP通信都是由用户代理(user agent)发起的。在这个请求/响应链中经常会出现一个或多个中间者。常见的中间者有三种:代理(proxy),网关(gateway)和隧道(tunnel),这里就不做深究了。
下面罗列几个状态码,能更好的理解请求状态,同时也便于我们处理异步请求。
2XX:这一类型的状态码,代表请求已经成功被服务器接收、理解、并收受。
200 OK
请求已经成功,请求所希望的响应头或者数据体将随此响应返回,看到它也就看到了成功。
3xx: 重定向
304 Not Modified
如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或根据请求的条件)并没有改变,则服务器返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。
该响应必须包含以下的头信息:
- Date,除非这个服务器没有时钟。假如没有时钟的服务器也遵守这些规则,那么代理服务器以及客户端可以自行将Date字段添加到接收到的响应头中去(正如RFC 2068中规定的一样),缓存机制将会正常工作。
- ETag和/或Content-Location,假如同样的请求本应返回200响应。
- Expires, Cache-Control,和/或Vary,假如其值可能与之前相同变量的其他响应对应的值不同的话。
假如某个304响应指明了当前某个实体没有缓存,那么缓存系统必须忽视这个响应,并且重复发送不包含限制条件的请求。
假如接收到一个要求更新某个缓存条目的304响应,那么缓存系统必须更新整个条目以反映所有在响应中被更新的字段的值。
4xx: 客户端错误
404 Not Found
请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。
5xx: 服务器错误
这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。
我最近就经常以下两个错误,不稳定的开发环境非常影响开发效率和开发心情,以后如果看到以下的就直接大喊“网管!”哈~
502 Bad Gateway
作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
504 Gateway Timeout
作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。
注意:某些代理服务器在DNS查询超时时会返回400或者500错误
不多说了更多状态码内容见维基百科。