慎用wsgiref.handlers.CGIHandler

标签:Google App Engine, Python

这2天写YUI时发现个bug,老是莫名其妙地出现304状态码。即便使用完全刷新,用Firefox确认没有发送If-None-Match头,也会收到这个状态码。

最初我以为是自己的缓存处理有问题,可添加了很多检查点,就是找不到这个bug的出处,而且老是时有时无。

最终我把logging设在了传给handler的environ对象上,发现它居然带有If-None-Match头,于是真相大白了:wsgiref.handlers.CGIHandler在初始化请求时,没有处理好environ对象。

接着我把wsgiref.handlers.CGIHandler().run(application)改成了google.appengine.ext.webapp.util.run_wsgi_app(application),发现问题简单地解决了。

这个bug是我在本地开发服务器上发现的,尚未测试GAE服务器上是否存在这个问题。不过建议还是使用Google提供的工具函数来运行,虽然性能稍微低了一点,但至少没有这个令人发指的bug。

看来有的时候不能太相信标准库,虽说我也不确定这是标准库还是GAE SDK的bug,但至少兼容性并不一定完美。

0条评论 你不来一发么↓

    想说点什么呢?