2014-03-13 26 views
0

我想从一个伪装成远程网络服务器的静态页面发布到我的Flask应用中,因为Flask-uWSGI-WebSocket而在uwsgi后面运行。CORS阻止来自jQuery的帖子

每次我张贴到我的服务器,帖子被阻止,因为CORS的: XMLHttpRequest cannot load http://127.0.0.1:5000/tnw/post. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

我已经安装了flask-cors和起源设置为*,但我仍然不能得到它去。我还有什么在这里错过?

我的帖子: $("#ajaxbutton").click(function() { var json = JSON.stringify(generate_json()); $.post('http://127.0.0.1:5000/tnw/post', json); });

+1

如何访问发出CORS请求的页面?它是通过http://还是file://(后者会给你一个'null'的起源,你不想这么做)。如果是后者,请尝试使用简单的http服务器(例如python -m SimpleHTTPServer)。另外,您是否需要在此端点上进行任何类型的身份验证?如果是这样,并且它是基于cookie的,则需要将'withCredentials' xhr字段设置为'true',以允许cookie与请求一起发布([docs](http://api.jquery.com/) jQuery.ajax /#jQuery的Ajax的设置))。 – jonafato

+0

把它变成答案,我可以接受它。 – ruipacheco

+0

这是个问题吗?现在添加一个答案,但我想确保它为未来的读者解决正确的问题。 – jonafato

回答

2

我可以看到这是两个问题之一:

  • 你所访问,使得在file://协议而不是http://的CORS请求的页面。这会导致您有origin'null'。尝试使用http://来代替访问(例如python -m SimpleHTTPServer)。

  • 您的端点是否需要基于cookie的身份验证? jQuery在默认情况下在CORS请求上省略cookie。如果您需要根据您的请求发送cookie,请将{xhrFields: withCredentials: true}添加到您的ajax请求中(docs)。