dqlxtv1452 2019-05-14 13:31
浏览 646
已采纳

在HTTP响应中对分块数据如何设置Content-Length

We have written a service which sends some encoded data as chunked to a proxy service which need Content-Length header to be set so that it can send proper response to end point. Even if I set the Content-Length header still it get stripped as part of the response to the client. Below is the code which set the header

func HTTPSuccessResponse(rw http.ResponseWriter, bufferLen int, media []byte) {
        rw.WriteHeader(http.StatusOK)

        rw.Header().Set("Content-Type", "opus/ogg; audio/ogg; codec=opus")
        length := strconv.Itoa(len(media));
        rw.Header().Set("Content-Length", length)
        rw.Write(media)
}

Below is the response I get when I try to the request using curl

bash-4.2# curl -v -X GET -k -H  -i 'http://127.0.0.1:8090/preview'
* About to connect() to 127.0.0.1 port 8090 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8090 (#0)
> GET /preview HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1:8090
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 14 May 2019 13:08:20 GMT
< Content-Type: text/plain; charset=utf-8
< Transfer-Encoding: chunked
<

I am using Gorrila Mux library for setting up HTTP server. Any thoughts how to make the header as part of the response.

  • 写回答

1条回答 默认 最新

  • dpl3350 2019-05-14 13:38
    关注

    Remove the WriteHeader call at the top. You can only write headers to a response once. After you call WriteHeader you can't set any more headers.

    Per the ResponseWriter documentation:

        // Changing the header map after a call to WriteHeader (or
        // Write) has no effect unless the modified headers are
        // trailers.
    

    So you can't call it first; but you also don't need to call it at all - from the same docs:

        // If WriteHeader is not called explicitly, the first call to Write
        // will trigger an implicit WriteHeader(http.StatusOK).
        // Thus explicit calls to WriteHeader are mainly used to
        // send error codes.
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?