读书人

golang server.go 处置head请求的一个

发布时间: 2013-09-18 14:17:40 作者: rapoo

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
curl: (52) Empty reply from server

测试,果然崩溃了,崩溃信息一致,到此bug定位了。。。
修复方案:注释掉
//os.Exit(1)

再次运行:philsong@compiler:~$ curl -I 192.168.7.14:9090
HTTP/1.1 200 OK
Date: Tue, 17 Sep 2013 06:31:32 GMT


philsong@compiler:~$ curl -I 192.168.7.14:9090
HTTP/1.1 200 OK
Date: Tue, 17 Sep 2013 06:31:40 GMT

GOD,一切正常了:)小伙伴们开心的笑了。。。。

读书人网 >编程

热点推荐