golang server.go 处理head请求的一个小坑
虽然是个小坑,可是trace了一个星期,浪费了不少时间,解决方案很简单,思考的过程却是很值得借鉴:)
http web完整代码在:https://github.com/philsong/golang_samples/tree/master/src/emvdecoder
emvdecoder中问题代码片段如下:
899func (w *response) Write(data []byte) (n int, err error) { 900if w.conn.hijacked() { 901log.Print("http: response.Write on hijacked connection") 902return 0, ErrHijacked 903} 904if !w.wroteHeader { 905w.WriteHeader(StatusOK) 906} 907if len(data) == 0 { 908return 0, nil 909} 910if !w.bodyAllowed() { 911return 0, ErrBodyNotAllowed 912} 913 914w.written += int64(len(data)) // ignoring errors, for errorKludge 915if w.contentLength != -1 && w.written > w.contentLength { 916return 0, ErrContentLength 917} 918return w.w.Write(data) 919}猜测是发起的head请求,不是正常的get和post请求,怪不得,直接用浏览器访问时无法重现这个bug,于是用philsong@compiler:~$ curl -I 192.168.7.14:9090
//os.Exit(1)