由于浏览器的同源策略(是一种浏览器为安全性考虑实施的安全策略),当从一个域上加载的脚本去访问另一个域的文档属性时,则会被拒绝。
同源指:URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则为同源,否则为跨域。
跨域仅限于使用XMLHttpRequest对象和Fetch发起的HTTP请求。
Django如何解决跨域:
1、安装模块
pip install django-cors-headers
2、settings.py配置文件设置
添加App
添加中间件,需要注意放的位置,在SessionMiddleware后面以及CommonMiddleware前面
添加配置参数
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'http://ops.xxx.com',
'http://ops.xxx.com:8001',
)
CORS_ALLOW_METHODS = ('DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW',)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
'x-token',
)
到这一步所有的跨域配置其实都已经配置完成了,但是需要注意的是,有些前端访问时console依旧报跨域的问题,这里一般会有两种情况,也是我所遇到的,其实都很简单。
第一个是注意CORS_ALLOW_HEADERS,有些web前端可能还有其它的一些头部,当访问还是存在有跨域的时候,注意看是否存在上面没有的头部,添加上去即可。
第二个则是你后端Django程序报错,如果程序报错,前端console也会打印出跨域的信息出来,这个时候要检查一下Django代码。