若是你開發的項目出現了跨域問題, 那你可能須要 django-cors-headers
來解決你的煩惱, 它會添加 Cross-Origin Resource Sharing (CORS) 做爲響應的標頭, 以支持你從其餘域上獲取 Django 資源。 Github 地址python
要求 Python
版本最低爲 3.5
要求 Django
版本最低爲 2.2
使用 Python-pip
安裝:git
python3 -m pip install django-cors-headers
複製代碼
在項目的 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
CORS_ORIGIN_ALLOW_ALL
api
若是值是 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_REFERER
爲 True
, 那麼 CorsMiddleware
會將 Referer
頭更改成每當 CORS 檢查經過時都會經過 Django 的 CSRF 檢查的內容, 默認爲 False
。
2020 咱們一塊兒加油, 中國加油。