Fiddler围绕JSON响应

时间:2015-08-07 16:11:07

标签: json go fiddler

我在Go中实现了一个Web服务,它从外部服务返回一个JSON结构。返回对象后,它看起来像这样:

{"otherServiceInfoList":[],"action...

我的Go网络服务只是将JSON读取到切片:

response, err := ioutil.ReadAll(resp.Body)

并将其返回给客户端:

w.Write(response)

响应在Postman中按原样显示,但Fiddler前缀并按如下方式附加响应:

34ee
{"otherServiceInfoList":[],"...
0

注意前导34ee和尾随0

然后我被提升为转换响应:

  

“响应已编码,可能需要在检查前解码。”

接受提示删除将返回原始JSON。 Go的w.write方法是应用额外的字符,还是特定于Fiddler?

顺便说一句,我在写入缓冲区之前设置了以下标题:

w.Header().Set("Content-Type", "application/json; charset=UTF-8")

2 个答案:

答案 0 :(得分:2)

这是http 1.1 chunked响应。该协议将发送格式:

size-of-chunk-in-hex
chunk
...

最终的块大小为0表示响应结束。您的示例显示响应为13550字节,并在一个块中发送。

答案 1 :(得分:1)

你正在处理一个分块响应。我不确定你的最终目标是什么,但有几个不同的选择。消息来源本身说;

    // Body represents the response body.
    //
    // The http Client and Transport guarantee that Body is always
    // non-nil, even on responses without a body or responses with
    // a zero-length body. It is the caller's responsibility to
    // close Body.
    //
    // The Body is automatically dechunked if the server replied
    // with a "chunked" Transfer-Encoding.
    Body io.ReadCloser

所以例如这里; response, err := ioutil.ReadAll(resp.Body)您正在转发来自其他服务的响应,您可以通过使提供resp的服务设置带有chunked值的Transfer-Encoding标头来解决问题,假设您可以访问该服务api也是。如果你只是在这个中间层工作,那么你必须在编写之前自己去掉响应。如果你在Fiddler中监控的请求没有chunked转移编码,只需添加它就可能导致Fiddler显示它与Postman中显示的相同。