關於跨域請求和django處理跨域請求最佳解決方案的總結
阿新 • • 發佈:2019-02-08
一、什麼是跨域請求?
跨域:
簡單來說就是 A 網站的 javascript 程式碼試圖訪問 B 網站,包括提交內容和獲取內容。這顯然是不安全的。為此,瀏覽器的鼻祖:網景(Netscape)公司提出了優秀的解決方案:著名的瀏覽器同源策略。現在所有支援JavaScript的瀏覽器都會使用這個策略。
同源:域名、協議、埠均相同的網站即為同源。
流程:
當一個瀏覽器的兩個Tab頁分別開啟百度和谷歌頁面時,百度發起一個指令碼執行,此時瀏覽器會檢查該指令碼屬於哪個頁面。即檢查是否同源。只有和百度同源的指令碼才會被執行。若非同源,在請求資料時,瀏覽器會在控制檯報一個異常。提示拒絕訪問。
ps: 以上關於同源策略解釋參考自 百度百科-同源策略。
二、關於解決跨域請求
解決跨域請求從前端到後端有N種解決方式。我不在此一一列舉。只分享一個目前看來對django處理跨域請求的最佳方案。
1.安裝django-cors-headers
pip install django-cors-headers
2.配置settings.py檔案
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', # 注意順序
...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'*'
)
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',
)
通過以上配置,即可完美解決django跨域請求處理。唯一需要注意的就是cors-headers的中介軟體CorsMiddleware在註冊時必須放在django-common中介軟體的前一個。
如有漏洞還請指正。