安卓第10周
同源:ip和埠,以及協議都相同
請求的url地址,必須與瀏覽器上的url地址處於同域上,也就是域名,埠,協議相同.
瀏覽器的安全策略:請求從一個域發到了另外一個域,另外一個域響應了,瀏覽器把資料攔截了
基於瀏覽器的前後端分離的專案存在跨域問題
pycharm監聽了8000埠,它可以讓其多個子執行緒也監聽這個埠,正常情況是:不能多個程式監聽同一個埠
CORS:跨域資源共享,一個域允許其他的域來自己這裡拿資料,本質就是在響應頭部加入允許,允許某些域和某些頭
瀏覽器將CORS請求分為兩類:簡單請求和非簡單請求
瀏覽器發出CORS簡單請求,只需要在頭資訊之中增加一個Origin字段。
瀏覽器發出CORS非簡單請求
如何“預檢” => 如果複雜請求是PUT等請求,則服務端需要設定允許某請求,否則“預檢”不通過 Access-Control-Request-Method => 如果複雜請求設定了請求頭,則服務端需要設定允許某請求頭,否則“預檢”不通過 Access-Control-Request-Headers
支援跨域,簡單請求
伺服器設定響應頭:Access-Control-Allow-Origin = ‘域名’ 或 ‘*’
支援跨域,複雜請求
由於複雜請求時,首先會發送“預檢”請求,如果“預檢”成功,則傳送真實資料。
- “預檢”請求時,允許請求方式則需伺服器設定響應頭:Access-Control-Request-Method
- “預檢”請求時,允許請求頭則需伺服器設定響應頭:Access-Control-Request-Headers
簡單請求只發一次請求,同時滿足以下條件
(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
非簡單請求時,瀏覽器首先發送一個options請求給到目標伺服器,看是否被目標伺服器允許,如果是,再發送真正的請求,否則,不再發送請求
配置第三方的CORS處理模組django-cors-headers
-
先安裝:pip install django-cors-headers
-
在配置檔案的app裡面註冊:'corsheaders',
-
新增到中介軟體裡面:'corsheaders.middleware.CorsMiddleware',
-
在配置檔案裡面新增:
CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_METHODS = ( 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW', ) CORS_ALLOW_HEADERS = ( # jwt 認證的頭 'authorization', # 格式的頭 'content-type', )