我有一个基于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服务器完全正常,因为所有卷曲测试都通过了。跨域的东西有问题。
答案 0 :(得分:1)
您是否正在激活CORS工具?您可以通过修改调用方法或在配置上设置它来使用该工具。
鉴于PyCachedAdmin
的实现没有表达我可能猜到的问题,可能你没有启用该工具,为此你只需要更改配置字典并做出类似这样的事情:
cherrypy.quickstart(PyCachedAdmin(),
config={
'/': {
'request.dispatch':
cherrypy.dispatch.MethodDispatcher(),
'tools.CORS.on': True}})
或者,如果您在PyCacheAdmin
上使用的方法已经过装饰或使用_cp_config
,则不需要额外的配置,这些答案对您没有帮助。