同源策略,瀏覽器拒毫不是當前域返回的數據。 好比: 當你從其餘網站向百度發送請求的時候,百度在執行完後會返回數據給你,可是該返回的數據由於不是在同一個域下,因此瀏覽器會給你拒絕掉該數據
已攔截跨源請求:同源策略禁止讀取位於 http://127.0.0.1:8001/SendAjax/ 的遠程資源。(緣由:CORS 頭缺乏 'Access-Control-Allow-Origin')。
可是注意,當項目中的訪問已經發生了,說明是瀏覽器對非同源請求返回的結果作了攔截javascript
只要同時知足如下兩大條件,就屬於簡單請求。java
(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
凡是不一樣時知足上面兩個條件,就屬於非簡單請求。python
瀏覽器對這兩種請求的處理,是不同的。django
--簡單請求: 一次請求 --非簡單請求: 兩次請求,在發送數據以前會先發一次請求用於作「預檢」(options),只有「預檢」經過後纔再發送一次請求用於數據傳輸。 * 關於「預檢」 - 請求方式:OPTIONS - 「預檢」其實作檢查,檢查若是經過則容許傳輸數據,檢查不經過則再也不發送真正想要發送的消息 - 如何「預檢」 => 若是複雜請求是PUT等請求,則服務端須要設置容許某請求,不然「預檢」不經過 Access-Control-Request-Method => 若是複雜請求設置了請求頭,則服務端須要設置容許某請求頭,不然「預檢」不經過 Access-Control-Request-Headers
支持跨域,簡單請求json
支持跨域,複雜請求跨域
因爲複雜請求時,首先會發送「預檢」請求,若是「預檢」成功,則發送真實數據。瀏覽器
在返回的結果中加入容許信息(簡單請求)安全
def test(request): import json obj=HttpResponse(json.dumps({'name':'lqz'})) # obj['Access-Control-Allow-Origin']='*' 這樣加入不安全 obj['Access-Control-Allow-Origin']='http://127.0.0.1:8004' return obj
放到中間件中處理簡單和複雜請求:服務器
rom django.utils.deprecation import MiddlewareMixin class CorsMiddleWare(MiddlewareMixin): def process_response(self,request,response): if request.method=="OPTIONS": #能夠加* response["Access-Control-Allow-Headers"]="Content-Type" response["Access-Control-Allow-Origin"] = "http://localhost:8080" return response