由於瀏覽器的同源策略(是一種瀏覽器為安全性考慮實施的安全策略),當從一個域上加載的腳本去訪問另一個域的文檔屬性時,則會被拒絕。
同源指: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代碼。