首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2013-09-18 
golang server.go 处理head请求的一个小坑虽然是个小坑,可是trace了一个星期,浪费了不少时间,解决方案很简

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,一切正常了:)小伙伴们开心的笑了。。。。

热点排行