HTTP 状态码

HTTP的状态码被分为了5大类,分别是:

1xx : Hold on (等着)
2xx : Here you go (执行完了,没毛病,拿着结果回去吧)
3xx : Go away (你要的不在我这儿,去别处找)
4xx : You fucked up (你丫出问题了)
5xx : I fucked up (我特么出问题了)

状态码为客户端提供了一种理解事务处理结果的便捷方式(比解析字符串方便多了)

1xx (信息性状态码):

一般来说,1xx类的状态码,发生在客户端和服务器交互过程中,两者对于某些情况做一定的约定,例如:

100 - Continue:说明收到了请求的初始部分,请客户端继续,发送了这个状态码之后,服务端在收到请求之后必须进行响应。

101 - Switching Protocols:说明服务器正在根据客户端的指定,将将协议切换成Update首部所列的协议

信息性状态码一般是在请求过程中,双方互相通知状态所使用,一般不会影响到本次请求的成功/失败。

2xx (成功状态码):

一般来说,当服务器给出2xx类的状态码,就表示本次请求成功了,例如:

200 - OK:本次请求没问题,返回的响应实体中包含了本次所请求的资源

204 - No Content:请求没问题,但是响应中没有数据

205 - Reset Content:主要用于浏览器客户端,负责通知浏览器将当前页面中的全部HTML元素清除

3xx (重定向状态码)

3xx的重定向状态码,要么是告诉客户端使用替代位置来访问他们所请求的资源,要么是提供一个替代的响应(而不是所请求的资源内容)。有了3xx状态码,浏览器就可以在不打扰用户体验的情况下,透明地转到新地址

301 - Moved Permanently:在目标资源被移除时使用,响应的Header中应当包含资源现在所处的url的Location字段(以后客户端都应该直接去这个url访问,永久重定向)

302 - Found:与301相似,不同的是客户端应当只在本次请求中临时地转到Location给出的地址,将来访问依然使用老的url(临时重定向)

303 - See Other:告知客户端请求已经处理完成,但服务器的响应不在这个url上获取,应当用另一个url(GET方式)来获取资源。主要是为了让POST请求的响应能直接将客户端定位到某个资源上

304 - Not Modified:服务端的资源与客户端上一次请求的一致,不需要重新传输,客户端使用本地缓存的即可

307 - Temporary Redirect:和302的功能大致相同,有一些细微区别,区别是由HTTP 1.0 和HTTP 1.1 之间的差异导致的,为了最大化兼容,所以保留了302并另起了307,所以一般来说,302用于HTTP 1.0 ,307用于HTTP 1.1

4xx (客户端错误状态码)

4xx 的状态码,出现在客户端发起了一些服务器无法处理的请求时,例如客户端请求了一个不存在的资源,或是请求了一个被禁止访问的资源,甚至是客户端发起的Method不合法(本该用GET的请求用了POST)

400 - Bad Request:用于告诉客户端它发送了一个错误的请求

403 - Forbidden:请求被服务器拒绝了,一般是请求了一个不允许客户端访问的资源,例如在nginx中命中了 deny 语句

404 - Not Found:服务器无法找到所请求的资源

405 - Method Not Allowed:客户端使用了一个不允许或不被支持的HTTP Method

410 - Gone:和404类似,不同的是服务器曾经拥有过此资源。主要用在Web站点维护时

5xx (服务器错误状态码)

5xx 的状态码。出现在客户端发送了一个有效的请求,但服务器自身却出错的时候。

500 - Internal Server Error:服务器内部出现了错误

501 - Not Implemented:客户端的请求超出了服务器的能力范围(例如请求下载一个超大的文件)

502 - Bad Gateway:作为代理或网关的服务器从请求响应链的下一条链路受到了一条伪响应,或者是根本就没有收到响应(例如在nginx+php-fpm的场景下,php-fpm出错导致没有向nginx返回响应)

503 - Service Unavailable:服务器目前暂时不能提供服务,但将来可以,如果要告诉客户端将来何时能提供服务,需要在响应Header中包含一个Retry-After