问一个关于http: multiple response.WriteHeader calls 错误的问题

haoyu_zjp · 2016-01-04 10:50:59 · 3357 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2016-01-04 10:50:59 的主题,其中的信息可能已经有所发展或是发生改变。

首先,我使用了github.com/ant0ine/go-json-rest/rest 这个包

直接贴代码

func Start(){

        NeptuneLog := logs.New()
        api := rest.NewApi()
        api.Use(rest.DefaultDevStack...)
        router, err := rest.MakeRouter(
                rest.Get("/:type/:action", handle),
                rest.Post("/:type/:action", handle),
        )
        if err != nil {
                NeptuneLog.Fatal(err)
        }
        api.SetApp(router)
        NeptuneLog.Fatal(http.ListenAndServe(":8080", api.MakeHandler()))
}

=================start 负责调用 handle ====================

func handle (w rest.ResponseWriter, r *rest.Request) {
        NeptuneLog := logs.New()
        t  := r.PathParam("type")
        if (t == "submit") {
                action := r.PathParam("action")
                submitNode := SubmitNode{R:r,W:w,Action:action}
                SubmitChan <- submitNode
                NeptuneLog.Printf("%v",w)
                //node := test11{Action:action}
                //w.WriteJson(node)
        } else if t  =="browser" {
                action := r.PathParam("action")
                browserNode := BrowserNode{R:r,W:w,Action:action}
                BrowserChan <- browserNode
        } else  {
                //w.WriteJson("not found")
        }
}

============= handle 负责把request 和 response 放到结构体,然后放到channel ============

func doSubmit () {

        NeptuneLog := logs.New()
        for item := range  SubmitChan{
                NeptuneLog.Println("111")
                node := test11{Action:item.Action}
                NeptuneLog.Printf("%v",node)
                NeptuneLog.Printf("%v",item.W)
                item.W.WriteJson(node)
                NeptuneLog.Printf("%v",item.W)
        }
}

=========== dosubmit 真正干活,负责从channel拿东西,然后返回 ======

调用之后,server打印出了

http: multiple response.WriteHeader calls

的错误

==========更新下最新进展 ========

我把打印的返回拿出来的

发现有 Conn.Write wrote more than the declared Content-Length 这个错误


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3357 次点击  
加入收藏 微博
2 回复  |  直到 2016-01-05 05:32:17
blov
blov · #1 · 9年之前

看错误,多次调用输出头?响应头在哪输出的,检查下

haoyu_zjp
haoyu_zjp · #2 · 9年之前
blovblov #1 回复

看错误,多次调用输出头?响应头在哪输出的,检查下

我又做了几次测试,我觉得错误应该是,handle函数退出会导致这个请求被置为完成的状态,然后这个ResponseWriter变量就不可用了,然后又再去读写这个变量,那么就挂掉了

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传