【发布时间】: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 passenger 和 puma 得到了相同的响应。我还尝试了其他一些与 Rails 无关的代码,以及我之前解释的 HTTP 响应,而不是 rails 所做的。
【问题讨论】:
标签: json http-headers ruby-on-rails-5