1. 程式人生 > >$Django 跨域問題(同源策略) vue專案(axios跨域請求資料)

$Django 跨域問題(同源策略) vue專案(axios跨域請求資料)

1 跨域問題

#同源策略
#本站的只能請求本站域名的資料 
#CORS實現(跨域資源共享)
#實現CORS通訊的關鍵是伺服器。只要伺服器實現了CORS介面,就可以跨源通訊。
#CORS基本流程

#1_CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request)

#2_滿足一下為簡單請求
(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 #3_簡單請求和非簡單請求的區別? 簡單請求:一次請求 非簡單請求:兩次請求,在傳送資料之前會先發一次請求用於做“預檢”,只有“預檢”通過後才再傳送一次請求用於資料傳輸* 關於“預檢” - 預檢請求方式:OPTIONS - “預檢”其實做檢查,檢查如果通過則允許傳輸資料,檢查不通過則不再發送真正想要傳送的訊息 - 如何“預檢” => 如果複雜請求是PUT等請求,則服務端需要設定允許某請求,否則“預檢”不通過 Access
-Control-Request-Method => 如果複雜請求設定了請求頭,則服務端需要設定允許某請求頭,否則“預檢”不通過 Access-Control-Request-Headers
#view區域性
    def test(request):
        ret=HttpResponse('ok')
       #允許http://127.0.0.1:8001域向我發請求 
        ret['Access-Control-Allow-Origin'] = 'http://127.0.0.1:8000'
        if
request.method == 'OPTIONS': # 所有的頭資訊都允許 ret['Access-Control-Allow-Headers'] = '*' return ret #設定中介軟體(全域性) class xxx(MiddlewareMixin): def process_response (self, request, response): # 簡單請求: # 允許http://127.0.0.1:8001域向我發請求 # ret['Access-Control-Allow-Origin']='http://127.0.0.1:8001' # 允許所有域向我發請求 response['Access-Control-Allow-Origin'] = '*' if request.method == 'OPTIONS': # 所有的頭資訊都允許 response['Access-Control-Allow-Headers'] = '*' return response
django中的cors(view設定以及中介軟體設定)

注意點1:有個csrf跨域防偽(允許別的域訪問的  域 要把csrf中介軟體注掉 | 檢視全部繼承apiview,as_view 返回了 csrf_exempt(view) ) 

2 axios跨域請求資料