跨域资源共享(CORS)问题通常发生在浏览器尝试从一个域向另一个域发送请求时,而服务器没有正确配置允许这种跨域请求
以下是解决Flask应用中CORS问题的几种方法:
Flask-CORS是一个Flask扩展,可以轻松地为你的应用添加CORS支持。首先,安装Flask-CORS:
pip install flask-cors
然后在你的Flask应用中使用它:
from flask import Flask, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/api/data')
def get_data():
data = {'key': 'value'}
return jsonify(data)
if __name__ == '__main__':
app.run()
这将允许所有域对你的API发起跨域请求。如果你想限制允许的域,可以使用origins
参数:
CORS(app, origins=['http://localhost:4200'])
如果你不想使用Flask-CORS扩展,你可以手动设置响应头来允许跨域请求。在你的Flask应用中,为每个路由添加以下响应头:
from flask import Flask, jsonify, make_response
app = Flask(__name__)
@app.route('/api/data')
def get_data():
data = {'key': 'value'}
response = make_response(jsonify(data))
response.headers.add('Access-Control-Allow-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
return response
if __name__ == '__main__':
app.run()
这将允许所有域对你的API发起跨域请求。与Flask-CORS扩展类似,你可以通过修改Access-Control-Allow-Origin
头来限制允许的域。
对于某些请求(如带有自定义头的请求或非GET/POST请求),浏览器会先发送一个预检请求(OPTIONS请求)。你需要确保你的Flask应用能够正确处理这些预检请求。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/data', methods=['GET', 'POST', 'OPTIONS'])
def get_data():
if request.method == 'OPTIONS':
response = app.make_default_options_response()
response.headers.add('Access-Control-Allow-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
return response
data = {'key': 'value'}
response = make_response(jsonify(data))
response.headers.add('Access-Control-Control-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
response.headers + response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
return response
if __name__ == '__main__':
app.run()
领取专属 10元无门槛券
手把手带您无忧上云