使用Python Tornado的Ajax请求获得405

时间:2010-12-06 09:19:54

标签: python ajax tornado http-status-code-405

我有一些javascript通过javascript(无库)对运行在不同端口上的本地站点进行“POST”调用。如果该网站使用mod_python运行应用程序,它就可以正常运行。如果它正在使用Tornado运行应用程序 - 它会因405错误而失败。我一定要在处理程序上实现post()和options()方法,但它仍然是错误的。由于这适用于mod_python,因此必须这样。任何人都知道如何让Tornado接受来自同一个ip的请求,但是一个不同的端口? (我只是在本地进行测试,并不关心安全问题)。

2 个答案:

答案 0 :(得分:0)

这里发生了一些奇怪的事情 - 但这不是你想的地方。

Ajax的同源策略实际上阻止了对任何不同地址的请求,即使该地址仅因端口号而异。请参阅政策的wikipedia's definition

所以问题实际上是,为什么它看起来好像mod_python版本有效?例如,您确定mod_python正在侦听您认为的端口吗? Javascript是什么样的,它如何确定它的发布位置?

答案 1 :(得分:0)

查看您的RequestHandler对象以及如何在Tornado中分发URL将会有所帮助。据我所知,只有缺少HTTP方法实现或缺少options()定义才会导致龙卷风发出405.

也许问题不是你没有实现正确的方法,而是你正在调用的url没有按照你认为的方式发送。

日志说什么?你在调试模式下运行龙卷风吗?当我在问问题时,您正在运行什么版本的龙卷风?

尝试将龙卷风置于调试模式,并添加一些logging.debug消息以确保您的请求甚至可以将其发送到您的RequestHandler,并查看更多正在发生的事情。

要在调试模式下运行,使用tornado 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