Flutter boost實現原理簡介
阿新 • • 發佈:2021-10-15
跨域問題
1 跨域問題介紹
# 跨域問題出現的原因? PC端,前後端分離,才會出現 -瀏覽器:同源策略,瀏覽器的基本安全策略,不允許 去不同的url地址獲取資料;域名,埠,協議必須相同 # 解決方案:CORS CORS,後端技術,跨域資源共享,服務端在響應頭中加入一下東西,允許跨域。 CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request) 簡單請求只發一次,非簡單請求傳送兩次,第一次是OPTIONS預檢請求,第二次是真正的請求。 # 簡單請求要滿足以下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 #
2 跨域問題解決
# 解決思路: 1.簡單請求,支援跨域 伺服器設定響應頭:Access-Control-Allow-Origin = '域名' 或 '*' 2.非簡單請求支援跨域 在響應頭中設定:Access-Control-Allow-Methods='*' 在響應頭中設定:Access-Control-Request-Headers='*' # 解決方案1:自定義中介軟體 class CorsMiddle(MiddlewareMixin): def process_response(self, request, response): if request.method == 'OPTIONS': response['Access-Control-Allow-Headers'] = '*' response['Access-Control-Allow-Methods'] = '*' # 在響應頭中加入Access-Control-Allow-Origin,處理了簡單請求 response['Access-Control-Allow-Origin'] = '*' # 處理非簡單請求 return response # 解決方案2:使用第三方模組 (推薦) 1安裝 pip install django-cors-headers 2 在app中註冊 INSTALLED_APPS = ( ... 'corsheaders', ... ) 3 在中介軟體中加入 MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddleware', ... ] 4 在配置檔案中配置 CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_METHODS = ( 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW', ) CORS_ALLOW_HEADERS = ( 'XMLHttpRequest', 'X_FILENAME', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', 'Pragma', 'token' )