1. 程式人生 > 其它 >模擬賽T2 交換 解題報告

模擬賽T2 交換 解題報告

跨域問題

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'
    )