跨域問題

什麼是跨域:django

瀏覽器的同源策略:跨域

請求的url地址,必須與瀏覽器上的url地址處於同域上,也就是域名,端口,協議相同,瀏覽器拒毫不是當前域域返回的數據瀏覽器

若是缺乏同源策略,瀏覽器很容易受到XSS,CSFR等攻擊服務器


一般狀況下,A網頁訪問B服務器資源時,不知足如下三個條件其一就是跨域訪問
1. 協議不一樣
2. 端口不一樣
3. 主機不一樣

app

同源策略限制如下幾種行爲:cors

  1.Cookie、LocalStorage、IndexDB沒法讀取url

  2.DOM和JS對象沒法得到spa

  3.AJAX請求不能發送code

 

如何解決:
CORS:跨域資源共享orm

 

  整個CORS通訊過程,都是瀏覽器自動完成,不須要用戶參與。對於開發者來講,CORS通訊與同源的AJAX通訊沒有差異,代碼徹底同樣。瀏覽器一旦發現AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感受。

  所以,實現CORS通訊的關鍵是服務器。只要服務器實現了CORS接口,就能夠跨源通訊

 


簡單請求:發一次請求

解決簡單的跨域問題:

http://127.0.0.1:8000 向 http://127.0.0.1:8001端口發請求 http://127.0.0.1:8001端口設置 obj=HttpResponse('數據') obj['Access-Control-Allow-Origin']='http://127.0.0.1:8000' return obj

 

非簡單請求

非簡單請求是發送了兩次請求,第一次是預檢請求(OPTIONS請求),

當預檢經過,容許我發請求,再發送真實的請求

 

同時知足如下兩大條件,就是簡單請求:

(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

 

 

 

 

 

django中解決跨域問題:

安裝django-cors-headers模塊

在settings.py中配置
# 註冊app
INSTALLED_APPS = [
    ...
    'corsheaders'
]
# 添加中間件
MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware'
]
# 容許跨域源
CORS_ORIGIN_ALLOW_ALL = True

 


解決跨域問題:(寫好這個中間件註冊一下)

 

class MyCorsMiddle(MiddlewareMixin):
def process_response(self, request, response): if request.method == 'OPTIONS': # 容許它 response['Access-Control-Allow-Headers'] = 'Content-Type' # obj['Access-Control-Allow-Headers']='*' # obj['Access-Control-Allow-Origin']='http://127.0.0.1:8000' response['Access-Control-Allow-Origin'] = '*' return response
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息