【发布时间】:2020-02-07 19:07:45
【问题描述】:
我正在使用 Flask 构建一个简单的后台。 我正在尝试使用 AJAX 在客户端发出一些请求,但它总是向我抛出以下错误:
从源 'http://localhost:5000' 访问 XMLHttpRequest 在 'http://10.11.0.123/...' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否 'Access-Control-Allow-Origin ' 请求的资源上存在标头。
我已经尝试了几种解决方案,但都没有奏效。我也在使用来自flask_cors的CORS包,方式如下:
CORS(app, resources={r"/hardware/control/1": {"origins": "http://localhost:5000"}})
app.run(host="0.0.0.0", port=5000, threaded=True)
但是,我认为这对 AJAX 请求没有影响,因为 Flask 应用程序在服务器端运行。所以这是我的ajax请求:
$.ajax({
url: 'http://10.11.0.123/...',
type: "GET",
contentType: 'text/plain',
headers: {
'Access-Control-Allow-Origin': '*',
},
withCredentials: true,
crossDomain: true,
success: function (result) {
console.log(result)
},
});
我知道目标服务器正在接收请求,但是我无法收到来自服务器的任何响应。
从 chrome 控制台分析网络请求,请求返回 status: failed 和 Type: xhr.
我在烧瓶中的终点是:
@system.route('/hardware/control/<int:device_id>')
def hardware_control(device_id):
device = Device.query.get(device_id)
return render_template('hardware_interaction/camera_preview.html',device=device)
我正在创建这样的应用程序:
def create_app():
app = Flask(__name__, instance_relative_config=False)
app.config.from_object('config.DevelopmentConfig')
CORS(app, resources={r"/hardware/control/*": {"origins": "*"}})
with app.app_context():
return app
app = create_app()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, threaded=True)
【问题讨论】:
-
而不是
"origins": "http://localhost:5000"尝试"origins": "*"并确保您访问的是resources属性中指定的端点。正如提到的一个稀疏的答案,问题是您的服务器需要有一个Access-Control-Allow-Origin标头集,该标头集将在所谓的“预检”或“选项”请求中返回。与往常一样,我建议阅读文档:developer.mozilla.org/en-US/docs/Web/HTTP/CORS -
感谢您的回复。这没用。我已经试过了。
标签: javascript python ajax flask flask-cors