GAE CGI: 如何响应HTTP状态码
我正在使用谷歌的应用引擎,它是一个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状态码在响应中很重要
- 你可以使用HTTP状态码204来表示没有内容的响应。
- 你也可以用403禁止访问,但我更喜欢用204,这样可以悄悄地处理请求。
- 如果你直接断开连接,可能会显得不太礼貌,而且用户可能会不断重试,这样会让服务器承受很大的压力。
[编辑:更新了问题]
你可以在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()
查看完整的应用程序: