用于更新和删除的HTTP状态代码?

时间:2010-02-26 15:16:41

标签: http http-status-codes

我应为UPDATEPUT)和DELETE设置哪些状态代码(例如,产品已成功更新)?

11 个答案:

答案 0 :(得分:1797)

对于 PUT 请求: HTTP 200 HTTP 204 应表示“资源已成功更新”。

对于 DELETE 请求: HTTP 200 HTTP 204 应表示“资源已成功删除”。还可以返回 HTTP 202 ,这意味着服务器已接受该指令并且“资源已被标记为删除”。

  

9.6 PUT

     

如果修改现有资源,则200(OK)或204(无内容)响应代码>应该被发送以表示请求的成功完成。

     

9.7删除

     

如果响应包括描述状态的实体,则成功响应应为200(OK),如果操作尚未执行,则应为202(已接受);如果已执行操作但响应为204(无内容)不包括实体。

来源:w3.org: HTTP/1.1 Method Definitions

  

HTTP 200 OK:成功HTTP的标准响应   要求。实际的反应会   取决于使用的请求方法。

     

HTTP 204无内容:服务器成功处理了请求,但未返回任何内容

来源:List of HTTP status codes: 2xx Success

答案 1 :(得分:791)

简短回答:对于PUT和DELETE,您应该发送200(OK)或204(No Content)。

答案很长:这是一个完整的决策图(点击放大)。

HTTP 1.1 decision diagram

来源:https://github.com/for-GET/http-decision-diagram

答案 2 :(得分:129)

以下是一些提示:

删除

  
      
  • 200 (如果您想在响应中发送一些其他数据)或 204 (推荐)。

  •   
  • 202 尚未提交删除的操作。

  •   
  • 如果没有要删除的内容,请使用 204 404 (删除操作是幂等的,删除已删除的项目是< em>操作成功,所以你可以返回 204 ,但是,幂等并不一定意味着同样的响应)

  •   
     

其他错误:

     
      
  • 400 错误请求(格式错误的语法或错误的查询奇怪但可能)。
  •   
  • 401 未经授权身份验证失败
  •   
  • 403 禁止:授权失败或应用程序ID无效。
  •   
  • 405 不允许。肯定。
  •   
  • 409 资源冲突可以在复杂系统中使用。
  •   如果出现错误,
  • 501 502
  •   

<强> PUT

  

如果您要更新集合的元素

     
      
  • 200/204 ,原因与上面的DELETE相同。
  •   
  • 202 如果尚未提交操作。
  •   
     

引用的元素不存在:

     
      
  • PUT可以 201 (如果您创建了元素,因为这是您的行为)
  •   
  • 404 如果您不想通过PUT创建元素。

  •   
  • 400 错误请求(格式错误的语法或错误查询比DELETE更常见)。

  •   
  • 401 未经授权
  •   
  • 403 禁止:身份验证失败或应用程序ID无效。
  •   
  • 405 不允许。肯定。
  •   
  • 409 资源冲突可以在复杂系统中实现,例如在DELETE中。
  •   
  • 422 无法处理的实体有助于区分“错误请求”(例如格式错误的XML / JSON)和无效字段值
  •   如果出现错误,
  • 501 502
  •   

答案 3 :(得分:13)

RFC 2616描述了which status codes to use

不,它总是200。

答案 4 :(得分:9)

除了200和204之外,205 (Reset Content)可能是有效的回复。

  

服务器已完成请求,用户代理应该重置文档视图,导致请求被发送... [例如]清除输入的表单。

答案 5 :(得分:6)

由于问题深入研究 DELETE “应该”返回 200 vs 204 ,因此有些人建议您返回实体链接,因此首选项为 200

  

“API不应该返回204(无内容),而应该是有用的   建议去的地方。在这个例子中,我认为有一个明显的链接   提供是“'somewhere.com/container/'(减去'资源')” - 从哪个容器   客户端刚刚删除了一个资源。也许客户希望   删除更多资源,这将是一个有用的链接。“

http://blog.ploeh.dk/2013/04/30/rest-lesson-learned-avoid-204-responses/

  

如果客户遇到204响应,它可以放弃,转到   API的入口点,或者回到之前的资源吧   参观。这两种选择都不是特别好。

就我个人而言,我不会说204是错的(作者也没有;他说“讨厌”)因为客户端的良好缓存有很多好处。无论哪种方式都是最好的。

答案 6 :(得分:2)

2014年6月RFC7231废弃了RFC2616。 如果您通过HTTP进行REST,那么RFC7231将准确描述GET,PUT,POST和DELETE的预期行为

答案 7 :(得分:1)

下面是一些状态代码,您应该以自己的知识来了解它们。

1XX信息回复

  
      
  • 100 继续
  •   
  • 101 交换协议
  •   
  • 102 处理
  •   
  • 103 早期提示
  •   

2XX成功

  
      
  • 200 确定
  •   
  • 201 已创建
  •   
  • 202 已接受
  •   
  • 203 非权威信息
  •   
  • 204 没有内容
  •   
  • 205 重置内容
  •   
  • 206 部分内容
  •   
  • 207 多状态
  •   
  • 208 已报告
  •   
  • 226 使用了IM
  •   

3XX重定向

  
      
  • 300 多项选择
  •   
  • 301 永久移动
  •   
  • 302 找到
  •   
  • 303 查看其他
  •   
  • 304 未修改
  •   
  • 305 使用代理
  •   
  • 306 切换代理
  •   
  • 307 临时重定向
  •   
  • 308 永久重定向
  •   

4XX客户端错误

  
      
  • 400 错误请求
  •   
  • 401 未经授权
  •   
  • 402 需要付款
  •   
  • 403 禁止
  •   
  • 404 未找到
  •   
  • 405 不允许使用方法
  •   
  • 406 不可接受
  •   
  • 407 需要代理身份验证
  •   
  • 408 请求超时
  •   
  • 409 冲突
  •   
  • 410 消失
  •   
  • 411 所需长度
  •   
  • 412 前提条件失败
  •   
  • 413 有效载荷过大
  •   
  • 414 URI太长
  •   
  • 415 不受支持的媒体类型
  •   
  • 416 范围无法满足
  •   
  • 417 预期失败
  •   
  • 418 我是茶壶
  •   
  • 420 方法失败
  •   
  • 421 请求错误的请求
  •   
  • 422 不可处理的实体
  •   
  • 423 已锁定
  •   
  • 424 依赖失败
  •   
  • 426 需要升级
  •   
  • 428 前提条件
  •   
  • 429 请求过多
  •   
  • 431 请求标头字段太大
  •   
  • 451 出于法律原因不可用
  •   

5XX服务器错误

  
      
  • 500 内部服务器错误
  •   
  • 501 未实现
  •   
  • 502 错误的网关
  •   
  • 503 服务不可用
  •   
  • 504 网关超时
  •   
  • 505 不支持Http版本
  •   
  • 506 变量也可以协商
  •   
  • 507 存储空间不足
  •   
  • 508 检测到循环
  •   
  • 510 未扩展
  •   
  • 511 需要网络身份验证
  •   

答案 8 :(得分:0)

超文本传输​​协议(HTTP / 1.1):语义和内容

简要解释! Know more about status codes

答案 9 :(得分:0)

{
    "VALIDATON_ERROR": {
        "code": 512,
        "message": "Validation error"
    },
    "CONTINUE": {
        "code": 100,
        "message": "Continue"
    },
    "SWITCHING_PROTOCOLS": {
        "code": 101,
        "message": "Switching Protocols"
    },
    "PROCESSING": {
        "code": 102,
        "message": "Processing"
    },
    "OK": {
        "code": 200,
        "message": "OK"
    },
    "CREATED": {
        "code": 201,
        "message": "Created"
    },
    "ACCEPTED": {
        "code": 202,
        "message": "Accepted"
    },
    "NON_AUTHORITATIVE_INFORMATION": {
        "code": 203,
        "message": "Non Authoritative Information"
    },
    "NO_CONTENT": {
        "code": 204,
        "message": "No Content"
    },
    "RESET_CONTENT": {
        "code": 205,
        "message": "Reset Content"
    },
    "PARTIAL_CONTENT": {
        "code": 206,
        "message": "Partial Content"
    },
    "MULTI_STATUS": {
        "code": 207,
        "message": "Multi-Status"
    },
    "MULTIPLE_CHOICES": {
        "code": 300,
        "message": "Multiple Choices"
    },
    "MOVED_PERMANENTLY": {
        "code": 301,
        "message": "Moved Permanently"
    },
    "MOVED_TEMPORARILY": {
        "code": 302,
        "message": "Moved Temporarily"
    },
    "SEE_OTHER": {
        "code": 303,
        "message": "See Other"
    },
    "NOT_MODIFIED": {
        "code": 304,
        "message": "Not Modified"
    },
    "USE_PROXY": {
        "code": 305,
        "message": "Use Proxy"
    },
    "TEMPORARY_REDIRECT": {
        "code": 307,
        "message": "Temporary Redirect"
    },
    "PERMANENT_REDIRECT": {
        "code": 308,
        "message": "Permanent Redirect"
    },
    "BAD_REQUEST": {
        "code": 400,
        "message": "Bad Request"
    },
    "UNAUTHORIZED": {
        "code": 401,
        "message": "Unauthorized"
    },
    "PAYMENT_REQUIRED": {
        "code": 402,
        "message": "Payment Required"
    },
    "FORBIDDEN": {
        "code": 403,
        "message": "Forbidden"
    },
    "NOT_FOUND": {
        "code": 404,
        "message": "Not Found"
    },
    "METHOD_NOT_ALLOWED": {
        "code": 405,
        "message": "Method Not Allowed"
    },
    "NOT_ACCEPTABLE": {
        "code": 406,
        "message": "Not Acceptable"
    },
    "PROXY_AUTHENTICATION_REQUIRED": {
        "code": 407,
        "message": "Proxy Authentication Required"
    },
    "REQUEST_TIMEOUT": {
        "code": 408,
        "message": "Request Timeout"
    },
    "CONFLICT": {
        "code": 409,
        "message": "Conflict"
    },
    "GONE": {
        "code": 410,
        "message": "Gone"
    },
    "LENGTH_REQUIRED": {
        "code": 411,
        "message": "Length Required"
    },
    "PRECONDITION_FAILED": {
        "code": 412,
        "message": "Precondition Failed"
    },
    "REQUEST_TOO_LONG": {
        "code": 413,
        "message": "Request Entity Too Large"
    },
    "REQUEST_URI_TOO_LONG": {
        "code": 414,
        "message": "Request-URI Too Long"
    },
    "UNSUPPORTED_MEDIA_TYPE": {
        "code": 415,
        "message": "Unsupported Media Type"
    },
    "REQUESTED_RANGE_NOT_SATISFIABLE": {
        "code": 416,
        "message": "Requested Range Not Satisfiable"
    },
    "EXPECTATION_FAILED": {
        "code": 417,
        "message": "Expectation Failed"
    },
    "IM_A_TEAPOT": {
        "code": 418,
        "message": "I'm a teapot"
    },
    "INSUFFICIENT_SPACE_ON_RESOURCE": {
        "code": 419,
        "message": "Insufficient Space on Resource"
    },
    "METHOD_FAILURE": {
        "code": 420,
        "message": "Method Failure"
    },
    "UNPROCESSABLE_ENTITY": {
        "code": 422,
        "message": "Unprocessable Entity"
    },
    "LOCKED": {
        "code": 423,
        "message": "Locked"
    },
    "FAILED_DEPENDENCY": {
        "code": 424,
        "message": "Failed Dependency"
    },
    "PRECONDITION_REQUIRED": {
        "code": 428,
        "message": "Precondition Required"
    },
    "TOO_MANY_REQUESTS": {
        "code": 429,
        "message": "Too Many Requests"
    },
    "REQUEST_HEADER_FIELDS_TOO_LARGE": {
        "code": 431,
        "message": "Request Header Fields Too"
    },
    "UNAVAILABLE_FOR_LEGAL_REASONS": {
        "code": 451,
        "message": "Unavailable For Legal Reasons"
    },
    "INTERNAL_SERVER_ERROR": {
        "code": 500,
        "message": "Internal Server Error"
    },
    "NOT_IMPLEMENTED": {
        "code": 501,
        "message": "Not Implemented"
    },
    "BAD_GATEWAY": {
        "code": 502,
        "message": "Bad Gateway"
    },
    "SERVICE_UNAVAILABLE": {
        "code": 503,
        "message": "Service Unavailable"
    },
    "GATEWAY_TIMEOUT": {
        "code": 504,
        "message": "Gateway Timeout"
    },
    "HTTP_VERSION_NOT_SUPPORTED": {
        "code": 505,
        "message": "HTTP Version Not Supported"
    },
    "INSUFFICIENT_STORAGE": {
        "code": 507,
        "message": "Insufficient Storage"
    },
    "NETWORK_AUTHENTICATION_REQUIRED": {
        "code": 511,
        "message": "Network Authentication Required"
    }
}

答案 10 :(得分:-1)

修改资源后,响应代码应 200(“OK”)。如果资源状态以更改URI的方式更改为资源(例如,重命名用户帐户),则响应代码为301(“永久移动”),并且Location头应提供新的URI。

删除对象时,响应代码应为200(“OK”)。

请点击以下链接了解更多详情 - status code for rest