[RESTful]HTTP状态码

  HTTP状态码是一个依附于HTTP响应的3位数字,它是协议语义的一部分,能在最基本的层面上让客户端知道服务器在尝试处理请求的时候发生了什么事情。HTTP规范总共定义了41一个响应码,本文将对所有的状态码进行介绍。

一、状态码家族

  HTTP状态码的第一位数字是表明请求进展情况的一个非常通用的指示。HTTP规范使用1~5作为首数字分别定义了5个状态码家族。

  1xx:Information

  仅在HTTP客户端与服务器之间进行协商时使用。

  2xx:Successful

  客户端所要求的任意的状态码转换已经发生。

  3xx:Redirection

  客户端要求的状态转换没有发生。但是如果客户端愿意发起一个稍有不同的HTTP请求,该请求应该会完成客户端要求的行为。

  4xx:Client Error

  由于HTTP请求的问题,导致客户端要求的状态转换没有发生。该请求可能有缺陷、不合逻辑、自相矛盾或者该请求无法被服务器接受。

  5xx:Server Error

  由于服务器端的问题,导致客户端要求的状态转换没有发生。客户端或许什么都做不了,只能等待问题被修复。

二、最低限度的四个状态码(200 301 400 500)

  200(OK)

  一切都非常顺利,实体消息体重的文档(如果有)是某个资源的一份表述。

  301(Moved Permanently)

  当客户端触发了某个将资源从一个URL移动到另一个URL的状态转换时将会发送该状态码。在移动后,向老的URL发送的请求将同样会导致一个301状态码。

  400(Bad Request)

  客户端存在问题。实体消息体中的文档(如果有)是一段错误消息。希望客户端能理解错误消息并使用它来修复问题。

  500(Internal Server Error)

  服务器端存在问题。实体消息体中的文档是一段错误的消息。该错误消息可能帮不了什么忙,因为客户端不能修复服务器端的问题。

三、状态码列表

  1xx:Information

  100(Continue)

  重要性:低到中等

  这是应对HTTP look-before-you-leap(LBYL)请求的可能相应中的一种。该状态码指示客户端应该重新发送它的初始请求,包括在首次请求中被省略了的(可能较大或较敏感)表述。客户端不需要担心发送表述后又被拒绝的问题。应对LBYL请求的另一个可能的相应是417(Expectation Failed)。

  101(Switching Protocols)

  重要性:非常低

  客户端只会在当请求中使用了Upgrade报头来通知服务器它想要选择使用排除HTTP之外的别的协议时才会收到该响应码。101状态码的意思是说“没问题,现在我开始使用另外一种协议跟你交谈”。

 

  2xx:Successful

  200(OK)

  重要性:非常高

  这是客户端大部分情况下希望看到的状态码。它指示状态转换已经结束,并且在2xx系列中找不到更加具体且合适的状态码的时候可以使用它。

  201(Created)

  重要性:高

  当服务器基于客户端的请求创建了新的资源后它会发送改状态码。

  202(Accepted)

  重要性:中等

  客户端的请求不能或者不会被实时地处理,并且将会在后续被处理。

  203(Non-Authoritative Information)

  重要性:非常低

  该状态码与200相同,但是除此之外服务器还想让客户端了解一些并非来自该服务器的相应报头。这些报头可能反映自客户端的前一个请求,或者是从第三方组织获得的。

  204(No Content)

  重要性:高

  该状态码通常在响应例如PUT请求这样的非安全请求时被发送,意思是服务器已经执行了状态转换,但是它拒绝发送回任何表述或状态转换的描述。服务器可能会在对应GET请求的响应中发送回204。这意味着该请求的资源存在,但是它拥有一个空的表述。相比于304(Not Modified),204通常见于浏览器中的JavaScript应用。它让服务器可以告诉客户端,客户端的输入已经被接受,但是该客户端不应该修改任何的UI元素。

  205(Requet Content)

  重要性:低

  该状态类似于204,但是它暗示了客户端应该重置数据来源的视图或数据结构。如果你在你的Web浏览器中提交了一个HTML表单,并得到了204的响应,那么你的数据仍然还在表单里,而你还可以修改它们。但是如果你得到一个205,这些表单字段将会重置为它们的原始值。

  206(Partial Conent)

  重要性:对于支持partial GET 的API来说非常高,而对于其他API则比较比较低。

  该响应码类似于200,但是它被指定作为partial GET请求的响应:也就是说,该请求使用了Content-Range这一请求报头。客户端通常会发起一个局部请求来恢复一个被中断的大型二进制表述的下载。

(未完待续)

转载请注明来源:http://www.cnblogs.com/caoming/p/4158662.html

参考资料:O‘REILLY RESTful Web APIS

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。