GAE CGI:如何回复http状态代码

时间:2010-10-22 04:14:24

标签: python google-app-engine cgi

我正在使用google appening,这是CGI环境。我想阻止一些请求,我甚至没有响应甚至没有http状态代码。另外,我想关闭连接。我可以这样做吗?

更新

我决定使用pyfunc所说的,使用204状态,但是如何在GAE CGI环境中执行此操作而不使用任何web框架。

更新2:

非常感谢,但是......我真的需要一种CGI方式,而不是WSGI方式。请参阅我的代码中的评论。

def main()
  #Block requests at once.
  if (settings.BLOCK_DOWNLOAD and os.environ.get('HTTP_RANGE')) \
        or (settings.BLOCK_EXTENSION.match(os.environ['PATH_INFO'])):
    #TODO: return 204 response in CGI way.
    #I really do not need construct a WSGIApplication and then response a status code.
    return

  application = webapp.WSGIApplication([
    (r'/', MainHandler),
    #...
    ], debug=True)
  run_wsgi_app(application)


if __name__ == '__main__':
  main()

1 个答案:

答案 0 :(得分:4)

  

HTTP状态代码在响应中很重要

  1. 您可以使用HTTP NO CONTENT 204来回复空白内容。
  2. 你可以使用403 Forbidden,但我更喜欢204做一个无声的请求
  3. 您可能会断开连接,但这样做会很粗鲁,并且可能会导致服务器因连接而重置,因为用户可能会重试。
  4. [编辑:更新的问题]

    您可以查看许多使用GAE标记的SO示例:

    据我了解,您将使用webapp框架。加强它的使用。

    检查如何在

    设置响应对象状态代码

    以下是裸骨服务器的示例,其响应204无内容。我没有对它进行过测试,但它也是类似的。

    import wsgiref.handlers 
    from google.appengine.ext import webapp 
    class MainHandler(webapp.RequestHandler):
        def get(self): 
            return self.response.set_status(204)
    
    def main(): 
        application = webapp.WSGIApplication([('/', MainHandler)], debug=True)
        wsgi.handlers.CGIHandler().run(application)
    
    if __name__ == '__main__': 
        main()
    

    请参阅完整的申请表: