cherrypy / jquery CORS麻烦

时间:2013-10-26 21:53:05

标签: javascript jquery python cors cherrypy

我有一个基于cherrypy的简单python web服务器。其资源应提供API。服务器具有以下代码以提供CORS:

def CORS():
    cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"

if __name__ == "__main__":
    cherrypy.tools.CORS = cherrypy.Tool('before_finalize', CORS)
    cherrypy.quickstart(PyCachedAdmin(), config={'/': {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}})

服务器在localhost:8080上运行。现在我有一个HTML文件,在localhost(默认端口80)上可用,它加载了jquery 1.9。我打开浏览器控制台,尝试$.ajax对cherrypy服务器执行任何AJAX请求。我一直在努力:

$.ajax({
  url:'http://localhost:8080/',
  type: "POST",
  dataType: "json",
  data: {command:"version"}
}).done(function(){
  console.log('hej');
});

$.ajax({
  url:'http://localhost:8080/',
  type: "POST",
  crossDomain: true,
  dataType: "jsonp",
  data: {command:"version"}
}).done(function(){
  console.log('hej');
});

$.support.cors = true

并没有任何效果。使用jsonp时我得到XMLHttpRequest cannot load http://localhost:8080/. Origin http://localhost is not allowed by Access-Control-Allow-Origin.GET http://localhost:8080/?callback=jQuery19102827550224028528_1382823727186&command=version&_=1382823727187 404 (Not Found)(它发送GET而不是POST是神秘的)。有几个类似的问题,我试过它们,这些是我的结果(有些事情仍然是错误的)。

PS服务器完全正常,因为所有卷曲测试都通过了。跨域的东西有问题。

1 个答案:

答案 0 :(得分:1)

您是否正在激活CORS工具?您可以通过修改调用方法或在配置上设置它来使用该工具。

鉴于PyCachedAdmin的实现没有表达我可能猜到的问题,可能你没有启用该工具,为此你只需要更改配置字典并做出类似这样的事情:

    cherrypy.quickstart(PyCachedAdmin(),
                        config={
                            '/': {
                               'request.dispatch':
                                    cherrypy.dispatch.MethodDispatcher(),
                               'tools.CORS.on': True}})

或者,如果您在PyCacheAdmin上使用的方法已经过装饰或使用_cp_config,则不需要额外的配置,这些答案对您没有帮助。