每天进步一点点——Swift Proxy日志错误:ERROR WSGI: code 400, message Bad request syntax


转载请说明出处:http://blog.csdn.net/cywosp/article/details/19819039
有段时间发现swift的proxy日志莫名其妙的记录了以下错误: [2013-09-25 17:35:10,222] ERROR WSGI: code 400, message Bad request syntax ('\x00\x00\x00\x00\x00\x00\x00%\x00\x00\x00\x06user01\x00\x00\x00\x17nmon_x86_rhel2 - \xe5\x89\xaf\xe6\x9c\xac\x00\x00\x00\x00\x00\x00\x00\x00PUT /v1.0/BB303D46698A4817A8BD42164F95D59D/obj/44EEA9E18EFE47D78FEF8DA1F8620F17-1B1AAA7606D04610A8BCE7D282CE07CB HTTP/1.1') (txn: tx26d387087fe0400bb254d629db558f83) (client_ip: 127.0.0.1)
Sep 28 11:25:09 localhost proxy ERROR WSGI: code 400, message Bad request version ('\x00\xff\x009\x008\x005\x003\x002\    x00\x04\x00/\xfe\xff\x00')
在swift的源码中搜了一下“ERROR WSGI:“关键字,只有在swift/common/wsgi.py中的def run_server(conf, logger, sock):函数里有:   ... Line: 209 # Redirect logging other messages by the underlying WSGI software. Line: 210 wsgi.HttpProtocol.log_message = \ Line: 211 lambda s, f, *a: logger.error('ERROR WSGI: ' + f % a)   ... 分析了一下,程序执行到这里还没有进入到proxy的handle_request函数就已经出错了,在网上搜了也没发现有人遇到过。不过经过一段时间的努力搜索,这个http://www.cnblogs.com/yuxc/archive/2012/12/06/2805552.html问题的到给了我启示,里面提到了出现类似错误有可能是因为客户端本应该是发送http请求的,但发送时变成https的请求了。于是自己用curl命令向proxy服务发送了一个https请求,果然日志记录了和上面类似的错误。经过排查原来是我们的C++客户端的堆栈被破坏了,向swift发送了异常请求。

相关内容