python web開發中跨域問題的解決思路


線上環境不存在跨域問題,nginx轉發

解決思路:

1.什么是跨域

在瀏覽器窗口中,和某個服務端通過某個 “協議+域名+端口號” 建立了會話的前提下,去使用與這三個屬性任意一個不同的源提交了請求,那么瀏覽器就認為你是跨域了違反了瀏覽器的同源策略

2.如何解決:3種方法

方法1:安裝django-cors-headers

  1. 下載django-cors-header

    pip install django-cors-header
  2. 配置settings.py文件

    INSTALLED_APPS = [
        ...
    
        'corsheaders',
        ...
     ] 
    
    MIDDLEWARE_CLASSES = (
        ...
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware', # 注意順序
        ...
    )
    
    #跨域增加忽略
    
    CORS_ALLOW_CREDENTIALS = True
    CORS_ORIGIN_ALLOW_ALL = True
    CORS_ORIGIN_WHITELIST = (
        '*'
    )
    
    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',
    )

方法2:使用JSONP

使用Ajax獲取json數據時,存在跨域的限制。不過,在Web頁面上調用js的script腳本文件時卻不受跨域的影響,JSONP就是利用這個來實現跨域的傳輸。因此,我們需要將Ajax調用中的dataType從JSON改為JSONP(相應的API也需要支持JSONP)格式。jsonp只能用於get請求

方案3.直接修改Django中的views.py文件,原理是修改請求頭

#修改views.py中對應API的實現函數,允許其他域通過Ajax請求數據: def myview(_request): response = HttpResponse(json.dumps({“key”: “value”, “key2”: “value”})) response[“Access-Control-Allow-Origin”] = “*” response[“Access-Control-Allow-Methods”] = “POST, GET, OPTIONS” response[“Access-Control-Max-Age”] = “1000” response[“Access-Control-Allow-Headers”] = “*” return response


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM