GAE CGI: как ответить http код состояния - PullRequest
0 голосов
/ 22 октября 2010

Я использую Google Appening, это среда 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 голосов
/ 22 октября 2010

Код HTTP важен в ответе

  1. Вы можете использовать HTTP NO CONTENT 204, чтобы ответить пустым содержимым.
  2. Вы можете использовать 403 Запрещеноно я предпочитаю, чтобы 204 молча отбрасывал запрос
  3. Вы можете потерять соединение, но это будет грубо и может привести к тому, что сервер будет забит соединениями, поскольку пользователь может повторить попытку.Редактировать: обновленный вопрос]

    Вы можете посмотреть множество примеров SO с тегами GAE:

    Насколько я понимаю,вы будете использовать каркас веб-приложения.Увеличьте его использование.

    Проверьте, как установить код состояния объекта ответа на

    Вот пример сервера без костей, который отвечает 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()
    

    См. Полное заявление по адресу:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...