下面是关于 Flask 配置 Cors 跨域的实现的完整攻略,包括两条示例说明。
什么是 CORS?
CORS(Cross-Origin Resource Sharing)是一个 W3C 标准,用于解决浏览器的同源策略(Same-origin policy)限制,允许一个网站向另一个网站发出跨域请求,从而实现跨域通信。在跨域操作中,如果访问的资源是非简单请求,就会先发出一个预检请求,即 OPTIONS 请求。
Flask 如何实现 CORS?
在 Flask 中实现 CORS 的方式有很多种,可以使用 Flask-CORS 扩展、手动设置响应头等方式。
使用 Flask-CORS 扩展
- 安装 Flask-CORS 扩展:
pip install flask-cors
- 在 Flask 应用程序中应用 Flask-CORS 扩展:
```
from flask import Flask
from flask_cors import CORS
app = Flask(name)
CORS(app)
@app.route('/')
def index():
return 'Hello, World!'
```
可以单独对某个路由开启 CORS:
@app.route('/api')
@cross_origin()
def my_api():
return 'This is my API.'
- 设置 CORS 配置项:
app.config['CORS_HEADERS'] = 'Content-Type'
app.config['CORS_RESOURCES'] = {r"*": {"origins": "*"}}
这里的 CORS_HEADERS
表示要允许的响应头,可以是一个字符串,也可以是一个列表;CORS_RESOURCES
表示要允许的跨域资源,可以使用通配符指定,比如 *
,也可以使用正则表达式。
可以在 Flask 配置文件中设置这些配置项,方式如下:
```
class Config:
CORS_HEADERS = 'Content-Type'
CORS_RESOURCES = {r"": {"origins": ""}}
app = Flask(name)
app.config.from_object(Config)
CORS(app)
```
手动设置响应头
如果不想使用 Flask-CORS 扩展,可以手动设置响应头,方式如下:
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/')
def index():
response = make_response('Hello, World!')
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS, PUT, DELETE'
response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'
response.headers['Access-Control-Max-Age'] = 3600
return response
在响应头中设置了 Access-Control-Allow-Origin
、Access-Control-Allow-Methods
、Access-Control-Allow-Headers
、Access-Control-Max-Age
等字段,分别表示允许的源、允许的 HTTP 方法、允许的请求头、预检请求的有效期。
示例说明
示例1:使用 Flask-CORS 扩展
假设有一个 Flask 应用程序,需要允许 https://example.com
跨域访问它的某个路由,可以这样修改代码:
from flask import Flask, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app, resources={r"/api/*": {"origins": "https://example.com"}})
@app.route('/api/data')
def data():
return jsonify({'message': 'Hello, World!'})
其中,CORS(app, resources={r"/api/*": {"origins": "https://example.com"}})
表示只允许 /api
开头的路由被 https://example.com
跨域访问。
示例2:手动设置响应头
假设有一个 Flask 应用程序,需要允许任何来源跨域访问它的某个路由,可以这样修改代码:
from flask import Flask, jsonify, make_response
app = Flask(__name__)
@app.route('/api/data')
def data():
response = make_response(jsonify({'message': 'Hello, World!'}))
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS'
response.headers['Access-Control-Allow-Headers'] = 'Content-Type'
return response
在响应头中设置了 Access-Control-Allow-Origin
、Access-Control-Allow-Methods
、Access-Control-Allow-Headers
等字段,表示允许任何来源跨域访问该路由,并且只允许 GET、POST、OPTIONS 方法,允许的请求头只有 Content-Type。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask配置Cors跨域的实现 - Python技术站