Flask配置CORS跨域的实现前端请求限制
CORS(Cross-Origin Resource Sharing)是一个W3C标准,允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
在Flask中,可以使用Flask-CORS拓展来实现CORS跨域。
使用方法
需要安装Flask-CORS拓展:
pip install flask-cors
安装完成后,在Flask中使用如下:
from flask import Flask from flask_cors import CORS app = Flask(__name__) CORS(app)
如果需要更细粒度的控制,可以使用以下方法:
from flask import Flask from flask_cors import CORS app = Flask(__name__) cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
上面的代码表示,只有当请求的URL以/api/开头,才允许跨域请求。
如果需要更多的控制,可以使用如下方法:
from flask import Flask from flask_cors import CORS app = Flask(__name__) cors = CORS(app, resources={r"/api/*": {"origins": ["http://example.com", "https://sub.example.com"]}})
上面的代码表示,只有当请求的URL以/api/开头,并且请求来源是http://example.com和https://sub.example.com,才允许跨域请求。
可以使用如下方法来设置更多的CORS选项:
from flask import Flask from flask_cors import CORS app = Flask(__name__) cors = CORS(app, resources={r"/api/*": {"origins": "*", "methods": ["GET", "POST"], "allow_headers": ["X-Requested-With", "Content-Type"]}})
上面的代码表示,只有当请求的URL以/api/开头,并且请求来源是任意源,请求方法是GET或POST,请求头中包含X-Requested-With或Content-Type,才允许跨域请求。
也可以使用如下方法来设置CORS支持的响应头:
from flask import Flask from flask_cors import CORS app = Flask(__name__) cors = CORS(app, resources={r"/api/*": {"origins": "*", "expose_headers": ["X-My-Custom-Header"]}})
上面的代码表示,只有当请求的URL以/api/开头,并且请求来源是任意源,响应头中包含X-My-Custom-Header,才允许跨域请求。
也可以使用如下方法来设置CORS支持的响应头:
from flask import Flask from flask_cors import CORS app = Flask(__name__) cors = CORS(app, resources={r"/api/*": {"origins": "*", "max_age": 3600}})
上面的代码表示,只有当请求的URL以/api/开头,并且请求来源是任意源,最长允许3600秒内的请求,才允许跨域请求。
使用Flask-CORS拓展可以很方便的实现CORS跨域,提升前端请求的安全性。