1. 程式人生 > >關於跨域請求和django處理跨域請求最佳解決方案的總結

關於跨域請求和django處理跨域請求最佳解決方案的總結

一、什麼是跨域請求?

跨域:

簡單來說就是 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中介軟體的前一個。

如有漏洞還請指正。