django-跨域訪問


同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到XSS、CSFR等攻擊。所謂同源是指"協議+域名+端口"三者相同,即便兩個不同的域名指向同一個ip地址,也非同源。

同源策略限制以下幾種行為: 1.) Cookie、LocalStorage 和 IndexDB 無法讀取 2.) DOM 和 Js對象無法獲得 3.) AJAX 請求不能發送

 
#處理方法:
# 1.通過JSONP跨域
# JSON是一種數據交換格式
# JSONP是一種非官方的跨域數據交互協議
# jsonp是包含在函數調用中的json
# script標簽不受同源策略的影響,手動創建一個script標簽,傳遞URL,同時傳入一個回調函數的名字
# 服務器得到名字后,返回數據時會用這個函數名來包裹住數據,客戶端獲取到數據之后,立即把script標簽刪掉
# 2.cors:跨域資源共享
# 使用自定義的HTTP頭部允許瀏覽器和服務器相互通信
# 1.如果是簡單請求,直接設置允許訪問的域名:
# 允許你的域名來獲取我的數據                         
# response['Access-Control-Allow-Origin'] = "*"
# 2.如果是復雜請求,首先會發送options請求做預檢,然后再發送真正的PUT/POST....請求
# 因此如果復雜請求是PUT等請求,則服務端需要設置允許某請求
# 如果復雜請求設置了請求頭,則服務端需要設置允許某請求頭
#簡單請求:
# 一次請求 
#非簡單請求:
# 兩次請求,在發送數據之前會先發一次請求用於做“預檢”,
# 只有“預檢”通過后才再發送一次請求用於數據傳輸。
 
#只要同時滿足以下兩大條件,就屬於簡單請求。                             
# (1) 請求方法是以下三種方法之一:HEAD GET POST
# (2)HTTP的頭信息不超出以下幾種字段:                                     
# Accept                                     
# Accept-Language                                     
# Content-Language
# Last-Event-ID
# Content-Type:只限於三個值application/x-www-form-urlencoded、multipart/form-data、 text/plain 
#JSONP和CORS:
# 1.JSONP只能實現GET請求,而CORS支持所有類型的HTTP請求
# 2.jsonp需要client和server端的相互配合
# 3.cors在client端無需設置,server端需要針對不同的請求,來做head頭的處理

 

 CORS是一個W3C標准,全稱是"跨域資源共享"(Cross-origin resource sharing)。它允許瀏覽器向跨源(協議 + 域名 + 端口)服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制

pip install django-cors-headers
#安裝cors

  

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
 ] 

MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware', # 房租common前面
    ...
)
#跨域增加忽略
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',
    'Pragma',
)
#增加settings配置

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM