Запрос Ajax с Python Tornado Получение 405 - PullRequest
0 голосов
/ 06 декабря 2010

У меня есть некоторый javascript, который делает вызов POST через javascript (без библиотек) на локальный сайт, работающий на другом порту.Если на этом сайте запущено приложение, использующее mod_python, оно просто работает.Если оно запускает приложение, использующее Tornado - оно завершается с ошибкой 405.Я был уверен, что реализовал методы post () и options () в обработчике, и он все еще выдает ошибку.Так как это работает с mod_python, это должно быть возможно.Кто-нибудь знает, как заставить Торнадо принимать запросы от того же ip, но другого порта?(Я просто делаю это локально для тестирования, и меня не волнуют вопросы безопасности).

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

Это поможет увидеть как ваш объект RequestHandler, так и то, как вы отправляете URL в Tornado.Насколько мне известно, только отсутствующие реализации метода HTTP или отсутствующее определение options () могут привести к тому, что торнадо испустит 405.

Возможно, проблема не в том, что вы не реализуете надлежащие методы, а в том, что URLвы звоните не так, как вы думаете.

Что говорят логи?Вы запускаете торнадо в режиме отладки?Пока я задаю вопросы, какую версию торнадо вы используете?

Попробуйте перевести торнадо в режим отладки и добавить несколько сообщений logging.debug, чтобы убедиться, что ваш запрос даже поступает в ваш RequestHandler, и узнать больше о происходящем.

Для запуска в режиме отладки, с торнадо 1.1 (может быть, 1.0? Не помню), вы можете просто запустить свое приложение с помощью '--logging = debug'.Предполагая, что у вас есть вызовы logging.debug в вашем обработчике, вы получите сообщения :)

Вот пример обработчика, использующего включенную демонстрацию helloworld.py:

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        logging.debug("I'm in ur hndlrz, runnin yr codez")
        self.write("Hello, world")

Вот вывод журнала:

furby:helloworld jonesy$ ./helloworld.py --logging=debug
[D 101207 16:12:34 helloworld:28] I'm in ur hndlrz, runnin yr codez
[I 101207 16:12:34 web:849] 200 GET / (127.0.0.1) 1.03ms
[W 101207 16:12:34 web:849] 404 GET /favicon.ico (127.0.0.1) 0.34ms
0 голосов
/ 06 декабря 2010

Здесь происходит что-то странное, но это не то, где вы думаете.

Политика того же происхождения для Ajax фактически запрещает запросы на любой другой адрес, даже если этот адрес просто отличается номером порта. См. определение википедии политики.

Итак, на самом деле вопрос в том, почему это выглядит так, как будто версия mod_python работает? Например, вы уверены, что mod_python прослушивает порт, который вы считаете? Как выглядит Javascript и как он определяет, где публикуется?

...