【问题标题】:JSON HTTP response body from rails seems to be invalid来自 rails 的 JSON HTTP 响应正文似乎无效
【发布时间】:2017-07-05 18:00:16
【问题描述】:

我正在使用 Rails,并使用以下方法返回 json 响应

def return_json
    render json: params
end

当我在 chrome 开发人员工具上查看响应时,一切似乎都是正确的。但是当我在wireshark上跟踪HTTP响应时,在HTTP响应正文上似乎存在一些额外的字符。

HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 05 Jul 2017 17:07:48 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: max-age=0, private, must-revalidate
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Runtime: 0.433854
X-Request-Id: f46a0e87-6969-4285-9b80-da0223edac01
X-Powered-By: Phusion Passenger 5.1.5
Status: 200 OK

49
{"device_attributes":[{"id":"85","value":"35"},{"id":"80","value":"65"}]}
0
(extra empty line)

我说的是数字49,它是十六进制的,它似乎是 JSON 字符串的长度。之后它跟在 0 后面,空行。

Wireshark screenshot which shows the response

首先,我想问一下,一个有效的 HTTP 响应是什么样的? 我认为在标题之后,跟随一个空行,然后是响应正文,然后什么都没有。

其次,为什么 Rails 会这样做,以及是否有办法改变它。我认为 Rails 会这样做,因为我从 apache + phusion passengerpuma 得到了相同的响应。我还尝试了其他一些与 Rails 无关的代码,以及我之前解释的 HTTP 响应,而不是 rails 所做的。

【问题讨论】:

    标签: json http-headers ruby-on-rails-5


    【解决方案1】:

    我没有找到我正在寻找的答案,但是为了删除额外信息,一种解决方法是呈现如下:

    render plain: ActiveSupport::JSON.encode({ result: :ok })
    

    此解决方法确实将内容类型设置为“text/plain”而不是“application/json”。如果您将渲染选项中的内容类型设置为“应用程序/json”,则会再次显示此额外信息。

    所以我假设这与 json 渲染器模块有关,但我目前无法对其进行更多研究。

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      相关资源
      最近更新 更多