- 我的前端地址:http://www.forum.com:8080,与http://localhost:8080/相同,只是改了配置文件
- 我的后端地址:api.forum.com:8000,与127.0.0.1:8000相同
在做项目时,利用axios从前端Vue访问后端Django进行跨域请求,浏览器会报错如下:
http://www.forum.com:8080 has been blocked by CROS
-
报错原因:浏览器会自动拦截非同源请求
-
解决方法:利用corsheaders解决跨域同源策略问题
1、首先,在后端项目pycharm或你的IDE安装跨域模块
pip install django-cors-headers
2、在settings.py添加应用
INSTALLED_APPS = ( ... 'corsheaders', ... )
3、在settings.py添加中间件,注意顺序
MIDDLEWARE = [ ..., "corsheaders.middleware.CorsMiddleware", "django.middleware.common.CommonMiddleware", ..., ]
4、 在settings.py 添加白名单
# 请求头 CORS_ALLOW_HEADERS = ( 'XMLHttpRequest', 'X_FILENAME', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', 'Pragma', 'company', 'x-custom-header', ) # 允许的来源地址,填写你的前端地址 CORS_ALLOWED_ORIGINS = [ "http://www.forum.com:8080", "http://localhost:8080", ]