一、跨域CORS
位置 | 域名 |
---|---|
前端服务 | 127.0.0.1:8080 |
后端服务 | 127.0.0.1:8000 |
前端与后端分处不同的域名,这就涉及到跨域访问数据的问题,因为浏览器的同源策略,默认是不支持两个不同域间相互访问数据,而我们需要在两个域名间相互传递数据,这时我们就要为后端添加跨域访问的支持。
二、django中解决CORS方法
-
1、安装:pip install django-cors-headers
-
2、添加应用:
INSTALLED_APPS = ( ... 'corsheaders', ... )
-
3、中间层设置
MIDDLEWARE = [ # 特别是在可以生成响应的任何中间件之前,如果不是之前,它将无法将CORS标头添加到这些响应中。 # 一般放在中间件最上面 'corsheaders.middleware.CorsMiddleware', ... ]
-
4、添加白名单
CORS_ORIGIN_WHITELIST = ( '127.0.0.1:8080', 'localhost:8080', ) CORS_ALLOW_CREDENTIALS = True # 允许携带cookie
-
5、如果不使用白名单,并且接受所有的来源
CORS_ORIGIN_ALLOW_ALL = True
-
6、白名单通过正则匹配
CORS_ORIGIN_REGEX_WHITELIST = [ r"^https://\w+\.example\.com$", ]
-
7、跨域请求允许的请求方法
CORS_ALLOW_METHODS = [ 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', ]
注: 只需要完成1-4不操作就可以实现基本的跨域请求
三、flask中解决CORS方法
-
1、安装:pip install -U flask-cors
-
2、允许所有路由上所有域使用CORS
from flask import Flask from flask_cors import CORS app = Flask(__name__) CORS(app) @app.route("/") def helloWorld(): return "Hello, cross-origin-world!"
-
3、指定特定的CORS
app = Flask(__name__) cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) @app.route("/api/v1/users") def list_users(): return "user example"
-
4、CORS(app)中的参数
CORS(app, origins=None, methods=None, supports_credentials=False) """ origins: 允许来自的来源或原始列表。原点可以是正则表达式,区分大小写的字符串,也可以是星号. 允许来源用于非简单请求的方法或方法列表。类似于django中的CORS_ORIGIN_REGEX_WHITELIST; methods: 跨域请求允许的请求方法,相当于django中的CORS_ALLOW_METHODS; supports_credentials: 为True,允许用户进行经过身份验证的请求。允许跨域提交cookie。 """