我正在使用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。
答案 0 :(得分:0)
我没有找到我正在寻找的答案,但为了删除额外信息的解决方法是呈现如下:
render plain: ActiveSupport::JSON.encode({ result: :ok })
这项工作确实将content-type设置为'text / plain'而不是'application / json'。如果将render-options中的content-type设置为'application / json',则会再次显示此额外信息。
所以我认为这与json渲染器模块有关,但我现在不能再研究它了。