[flask-cors] flask CORS跨域资源共享 #flask #flask-cors
在介绍CORS(CrossOriginResourceShari吨,跨域资源共享)之前, 我们需要先了解一下同源策略( Same origin policy)。 出于安全考虑,浏览器会限制从脚本内发起的跨域请求。 这里的跨域包括不同域名、不同端口、不同HTTP模式(HTTP, HTTPS等)。 比如,从exampleA.com 向exampleB.com发起的请求就属于跨域请求 。
当API蓝本设置了子域后,假设我们的WebAPI部署在api.example.com中,而程序部署在 www.example.com中,这时从www.example.com向API发起的AJAX请求就会因为同源策略而失败。对于向第三方大范围公开的API,更要考虑支持 CORS。
在CORS流行之前,大多数API都通过支持JSONP(JSONwithPadding)来支持跨域请求。 和 JSONP相比 , CORS更加方便灵活,支持更多的跨域请求方法,并且在2014年成为W3C的推荐标准,逐渐开始替代JSONP。
CORS需要同时被浏览器和服务器支持,大多数浏览器都支持CORS,我们只需要在服务器端设置支持CORS。 我们可以使用扩展Flask-CORS来为API添加跨域访问支持, 先使用Pipenv进行安装:
pipenv install flask-cors
因为我们只需要对 API蓝本中的路由添加跨域请求支持,所以 Flask-CORS扩展只在蓝本中初始化 ,传人蓝本对象作为参数:
from flask import Blueprint
from flask_cors import CORS
api_v1 = Blueprint('api_v1', __name__)
CORS(api_v1)
默认情况下, Flask-CORS会为蓝本下的所有路由添加跨域请求支持,并且允许来自任意獗的跨域请求.