【问题标题】:Override 204 status code message覆盖 204 状态码消息
【发布时间】:2011-12-21 02:40:05
【问题描述】:

当我们收到 204 的无内容响应时,它会附带一条消息“无内容”并显示响应

      Response : #<Net::HTTPNoContent 204 No Content  readbody=true>

虽然我想要这样的回应:

 <response>
   <request_id>4ccf18f0-e83d-012e-29f7-042b2b8686e6</request_id>
   <status_code>204</status_code>
   <message>No Offers were found</message>
</response>

我可以覆盖 204 错误的默认消息吗?正在调用的方法来创建响应。

def generate_success_response_without_data(format, request_id, message)
  status_code = 204
  format_type_method, options_hash, content_type = get_format_method(format)
  data = {
    "request_id" => request_id,
    "status_code" => status_code,
    "message" => message
  }
  data = generate_data_format(format, data)
  resp = [status_code, {"Content-Type" => content_type}, data.send(format_type_method, options_hash)]
  # Convert rack response to action controller response           
  generate_active_controller_response_format(resp)
  resp
end

编辑: 如http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html中所述

204 响应不得包含消息正文,因此始终以标头字段后的第一个空行终止。

我们能否以某种方式破解并显示消息正文

【问题讨论】:

  • 我不确定黑客是否会有所帮助,大多数客户在收到 204 响应时不会期望任何消息正文,他们会忽略它(尽管我不确定)。
  • @Ernest ..yaa 我同意你的观点,但就我而言,他们期望的是,这就是让我在这里的原因......

标签: ruby xml json http http-status-code-404


【解决方案1】:

HTTP 204 不是错误响应。 204 用于响应成功且内容主体故意为空

发件人:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

服务器已完成请求,但不需要返回 实体主体,并且可能想要返回更新的元信息。这 响应可能包括新的或更新的元信息,形式为 entity-headers,如果存在应该与 请求的变体。

如果客户端是一个用户代理,它不应该改变它的文档视图 从导致发送请求的原因。这个回应是 主要目的是允许输入进行操作,而无需 导致用户代理的活动文档视图发生变化,尽管 任何新的或更新的元信息都应该应用于文档 当前在用户代理的活动视图中。

204 响应不能包含消息体,因此总是 由标题字段后的第一个空行终止。

在这种特殊情况下,404 看起来更合适。

更多:http://benramsey.com/archives/http-status-204-no-content-and-205-reset-content/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2020-04-05
    • 2022-01-15
    • 1970-01-01
    • 2018-09-30
    相关资源
    最近更新 更多