Flask-CORS详解

Flask-CORS详解

Flask-CORS详解

Flask-CORS是一个Flask扩展,用于简化Flask应用程序中跨来源资源共享(CORS)的处理。跨来源资源共享是一种用于让网页从不同源(也就是不同的域、协议或端口)发起对资源的网络请求的机制。如果不处理CORS,浏览器会阻止这种跨源请求,导致网页无法正常工作。Flask-CORS可以帮助我们轻松地解决这个问题。

安装Flask-CORS

首先,通过pip安装Flask-CORS:

pip install flask-cors

使用Flask-CORS

在Flask应用程序中使用Flask-CORS非常简单。只需要在应用程序初始化时,初始化Flask-CORS扩展,并将它绑定到应用程序上即可。

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

上面的代码片段中,我们导入了Flask和CORS模块,然后在创建Flask应用程序实例后,通过调用CORS(app)来初始化Flask-CORS扩展。

有时候,我们可能需要对不同的路由使用不同的CORS配置。这时可以使用CORS对象的app.route装饰器来实现。

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})

@app.route('/api/data')
def get_data():
    return {'data': 'Hello, World!'}

上面的代码片段中,我们通过resources参数指定了只对/api/*路由下的请求开启CORS,允许所有来源的请求。其他路由不受影响。

配置CORS选项

Flask-CORS支持多种配置选项,可以通过传递CORS扩展初始化时的参数来配置。下面是一些常用的配置选项:

  • origins: 一个允许的来源列表,可以是一个字符串、列表或正则表达式。
  • methods: 允许的HTTP请求方法列表,如GETPOST等。
  • headers: 允许的请求头列表。
  • expose_headers: 允许前端访问的响应头列表。
  • supports_credentials: 是否允许发送凭证信息(如cookies)。
  • max_age: 预检请求的有效期。

下面是一个示例代码,展示了如何使用这些配置选项:

app = Flask(__name__)
CORS(app, origins='https://www.example.com', supports_credentials=True)

预检请求(Preflight Requests)

当浏览器发起某些跨源请求时(如带有自定义头部或使用某些HTTP方法),浏览器会先发送一个预检请求(Preflight Request),以确定服务器是否支持跨源请求。Flask-CORS可以处理这些预检请求。

@app.route('/api/data', methods=['POST'], cors_allow_methods=['GET', 'POST'])
def post_data():
    return {'data': 'Posted data!'}

上面的代码片段中,我们通过methods参数指定了该路由允许的HTTP方法为POST,并且指定了允许的CORS方法为GETPOST。当浏览器发送跨源POST请求时,先会发送一个OPTIONS预检请求,服务器会返回一个包含Access-Control-Allow-Methods头的响应,告诉浏览器该路由支持的方法。

运行示例

FLASK_APP=app.py flask run

在浏览器中打开http://127.0.0.1:5000/api/data,正常情况下应该能够看到返回的数据。

总结

通过使用Flask-CORS扩展,我们可以方便地处理Flask应用程序中跨源资源共享的问题。Flask-CORS提供了灵活的配置选项,可以根据需要来配置CORS的行为。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程