3

我有一个基于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 文件,在加载 jquery 1.9 的 localhost(默认端口 80)上可用。我打开浏览器控制台尝试$.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

没有任何效果。我正在使用 jsonpXMLHttpRequest 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)使用 jsonp(它发送 GET 而不是 POST 很神秘)。周围有一些类似的问题,我试过了,这些是我的结果(仍然有问题)。

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

4

1 回答 1

1

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

鉴于PyCachedAdmin问题的实现没有表达,我可能猜想您可能没有启用该工具,为此您只需要更改配置字典并进行如下操作:

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

或者,如果您正在使用的方法PyCacheAdmin已经被修饰或_cp_config不需要使用额外的配置,那么这个答案对您没有帮助。

于 2013-11-01T07:15:17.223 回答