GAE CGI: 如何响应HTTP状态码

-1 投票
1 回答
1322 浏览
提问于 2025-04-16 05:53

我正在使用谷歌的应用引擎,它是一个CGI环境。我想要阻止一些请求,想要的结果是完全不返回任何东西,甚至连HTTP状态码都不想返回。或者,我只想关闭连接。这样做可以吗?

更新:

我决定按照pyfunc说的,使用204状态码,但我想知道在GAE的CGI环境下不使用任何网络框架,我该怎么做?

更新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 个回答

4

HTTP状态码在响应中很重要

  1. 你可以使用HTTP状态码204来表示没有内容的响应。
  2. 你也可以用403禁止访问,但我更喜欢用204,这样可以悄悄地处理请求。
  3. 如果你直接断开连接,可能会显得不太礼貌,而且用户可能会不断重试,这样会让服务器承受很大的压力。

[编辑:更新了问题]

你可以在StackOverflow上找到很多关于GAE的例子:

我了解到你会使用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()

查看完整的应用程序:

撰写回答