Django 跨域組件 - django-cors-headers

MedusaSorcerer的博客


1. 簡單介紹

若是你開發的項目出現了跨域問題, 那你可能須要 django-cors-headers 來解決你的煩惱, 它會添加 Cross-Origin Resource Sharing (CORS) 做爲響應的標頭, 以支持你從其餘域上獲取 Django 資源。 Github 地址python

2. 安裝

要求 Python 版本最低爲 3.5
要求 Django 版本最低爲 2.2
使用 Python-pip 安裝:git

python3 -m pip install django-cors-headers
複製代碼

3. 使用

在項目的 settings.py 應用中註冊組件:github

INSTALLED_APPS = [
    ...
    # 添加你定義的 APP 前面, 優先級更高
    'corsheaders',
    ...
]
複製代碼

在項目的 settings.py 中間件中註冊組件:shell

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]
複製代碼

CorsMiddleware 應該儘量放在前面, 使得它的優先級更高, 例如 Django 自帶的 CommonMiddleware 或者 WhiteNoiseMiddleware, 另外, 若是你正在使用 CORS_REPLACE_HTTPS_REFERER 的話, 它的優先級應該在 CsrfViewMiddleware 的前面。django

4. 配置參數說明

  • CORS_ORIGIN_ALLOW_ALLapi

    若是值是 True, 將不設置白名單, 將會容許全部請求訪問資源。跨域

  • CORS_ORIGIN_WHITELIST瀏覽器

    容許訪問跨域資源的主機列表, 默認是 [], 例如:緩存

    CORS_ORIGIN_WHITELIST  = [
        "http://127.0.0.1:9000"
    ]
    複製代碼
  • CORS_ORIGIN_REGEX_WHITELIST安全

    使用正則匹配的方式創建白名單, 它將會和請求的 Origins 相匹配, 例如:

    CORS_ORIGIN_REGEX_WHITELIST  = [
        r"http://192\.168\.\d+\.\d+",
    ]
    複製代碼
  • CORS_URLS_REGEX

    限制發送 CORS 標頭的 URL 信息, 默認狀況下是 r'^.*$' 意爲容許全部的 URL 添加標頭, 若是你只想在 /api/ 開頭的 URL 添加標頭的話, 你能夠這樣作:

    CORS_URLS_REGEX  =  r'^/api/.*$'
    複製代碼
  • CORS_ALLOW_METHODS

    容許添加標頭的請求方式, 默認爲:

    CORS_ALLOW_METHODS  = [
        'DELETE''GET''OPTIONS''PATCH''POST''PUT',
    ]
    複製代碼

    你能夠導入默認配置, 那你也能夠對他進行拓展, 並獲取它的最新配置數據:

    from corsheaders.defaults import default_methods
    
    CORS_ALLOW_METHODS = list(default_methods) + [
        'POKE',
    ]
    複製代碼
  • CORS_ALLOW_HEADERS

    發出實際請求時可使用的非標準HTTP標頭的列表, 默認爲:

    CORS_ALLOW_HEADERS = [
        'accept',
        'accept-encoding',
        'authorization',
        'content-type',
        'dnt',
        'origin',
        'user-agent',
        'x-csrftoken',
        'x-requested-with',
    ]
    複製代碼

    你也能夠導入默認值, 進行拓展, 並得到最新的配置數據:

    from corsheaders.defaults import default_headers
    
    CORS_ALLOW_HEADERS = list(default_headers) + [
        'my-custom-header',
    ]
    複製代碼
  • CORS_EXPOSE_HEADERS

    將向瀏覽器公開的HTTP標頭列表, 默認是 []

  • CORS_PREFLIGHT_MAX_AGE

    客戶端/瀏覽器能夠緩存預檢響應的秒數, 若是配置數據是 0 或者其餘非法數值, 都不會發送最大期限標頭, 默認狀況下是一天:86400

  • CORS_ALLOW_CREDENTIALS

    若是爲 True, 則將容許將 cookie 包含在跨站點的 HTTP 請求中, 默認爲 False, 在 Django 2.1 中,添加了 SESSION_COOKIE_SAMESITE 設置, 默認狀況下設置爲 Lax, 這將防止 Django 的會話跨域發送, 設置爲 None 能夠繞過此安全限制。

  • CORS_REPLACE_HTTPS_REFERER

    CORS_REPLACE_HTTPS_REFERERTrue, 那麼 CorsMiddleware 會將 Referer 頭更改成每當 CORS 檢查經過時都會經過 Django 的 CSRF 檢查的內容, 默認爲 False



2020 咱們一塊兒加油, 中國加油。

相關文章
相關標籤/搜索