1. 程式人生 > 其它 >python基礎(一)

python基礎(一)

同源:ip和埠,以及協議都相同

請求的url地址,必須與瀏覽器上的url地址處於同域上,也就是域名,埠,協議相同.

瀏覽器的安全策略:請求從一個域發到了另外一個域,另外一個域響應了,瀏覽器把資料攔截了

基於瀏覽器的前後端分離的專案存在跨域問題

pycharm監聽了8000埠,它可以讓其多個子執行緒也監聽這個埠,正常情況是:不能多個程式監聽同一個埠

CORS:跨域資源共享,一個域允許其他的域來自己這裡拿資料,本質就是在響應頭部加入允許,允許某些域和某些頭

瀏覽器將CORS請求分為兩類:簡單請求和非簡單請求

瀏覽器發出CORS簡單請求只需要在頭資訊之中增加一個Origin字段。
瀏覽器發出CORS非簡單請求

會在正式通訊之前,增加一次HTTP查詢請求,稱為”預檢”請求(preflight)。瀏覽器先詢問伺服器,當前網頁所在的域名是否在伺服器的許可名單之中,以及可以使用哪些HTTP動詞和頭資訊欄位。只有得到肯定答覆,瀏覽器才會發出正式的XMLHttpRequest請求,否則就報錯。

如何“預檢”
     => 如果複雜請求是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
  1. 先安裝:pip install django-cors-headers

  2. 在配置檔案的app裡面註冊:'corsheaders',

  3. 新增到中介軟體裡面:'corsheaders.middleware.CorsMiddleware',

  4. 在配置檔案裡面新增:

    CORS_ORIGIN_ALLOW_ALL = True
    
    CORS_ALLOW_METHODS = (
    	'DELETE',
    	'GET',
    	'OPTIONS',
    	'PATCH',
    	'POST',
    	'PUT',
    	'VIEW',
    )
    
    CORS_ALLOW_HEADERS = (	
        # jwt 認證的頭
    	'authorization',
        # 格式的頭
    	'content-type',	
    )