django-cors-headers配置项详解

django-cors-headers处理跨域请求,一个为响应添加跨源资源共享(CORS)头的Django应用。这允许从其他源向Django应用程序发出浏览器内请求。

来源github: django-cors-headers

安装

pip install django-cors-headers

配置settings.py

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',	# 放最前面
    ...
]

  1. CORS_ORIGIN_ALLOW_ALL: 添加允许执行跨站点请求的主机
# 如果为True,则将不使用白名单,并且将接受所有来源。默认为False
CORS_ORIGIN_ALLOW_ALL = True	
  1. CORS_ORIGIN_WHITELIST: 授权进行跨站点HTTP请求的来源列表。默认为[]
CORS_ORIGIN_WHITELIST = [
	"https://example.com""https://sub.example.com""http//localhost:8080",
    "http://127.0.0.1:9000",
]
  1. CORS_ORIGIN_REGEX_WHITELIST: 代表正则表达式的字符串列表
CORS_ORIGIN_REGEX_WHITELIST = [
	r"^https://\w+\.example\.com$",
]
  1. CORS_URLS_REGEX: 只需要在网站的一部分上使用CORS时很有用,例如位于的API /api/。
    CORS_URLS_REGEX = r'^/api/.*$'

  2. CORS_ALLOW_METHODS: 实际请求所允许的HTTP动词列表。

# 默认为
# CORS_ALLOW_METHODS = [
#     'DELETE',
#     'GET',
#     'OPTIONS',
#     'PATCH',
#     'POST',
#     'PUT',
# ]

# 自定义所允许的http动词列表
from corsheaders.defaults import default_methods
CORS_ALLOW_METHODS = list(default_methods) + [
    'POKE',
]
  1. CORS_ALLOW_HEADERS: 发出实际请求时可以使用的非标准HTTP标头的列表。
# 默认为:
CORS_ALLOW_HEADERS = [
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
]

# 自定义http标头
from corsheaders.defaults import default_headers
CORS_ALLOW_HEADERS = list(default_headers) + [
    'my-custom-header',
]
  1. CORS_EXPOSE_HEADERS: 将向浏览器公开的HTTP标头列表。默认为 []。

  2. CORS_PREFLIGHT_MAX_AGE:

客户端/浏览器可以缓存预检响应的秒数。如果该值为0(或任何错误值),则不会发送最大期限标头。默认为 86400(一天)。

注意:预检请求是在发出“不太简单”的请求(例如Content-Type,不是 application/x-www-form-urlencoded)时确定的,它是确定服务器实际接受的请求的额外请求。

  1. CORS_ALLOW_CREDENTIALS: 如果为True,则将允许将cookie包含在跨站点HTTP请求中。默认为False

在Django 2.1中,添加了SESSION_COOKIE_SAMESITE设置,'Lax’默认情况下设置为 ,这将防止Django的会话cookie跨域发送。更改它以None绕过此安全限制。

  1. CSRF整合

大多数站点都需要利用Django提供的跨站点请求伪造保护。CORS和CSRF是分开的,并且Django无法使用您的CORS配置免除网站Referer对安全请求所做的检查。做到这一点的方法是使用其CSRF_TRUSTED_ORIGINS设置。例如:

CORS_ORIGIN_WHITELIST = [
    'http://read.only.com',
    'http://change.allowed.com',
]

CSRF_TRUSTED_ORIGINS = [
    'change.allowed.com',
]
  1. CORS_REPLACE_HTTPS_REFERER

CSRF_TRUSTED_ORIGINS是Django 1.9中引入的,因此早期版本的用户将需要替代解决方案。如果CORS_REPLACE_HTTPS_REFERER为 True,CorsMiddleware则将Referer标头更改为每当CORS检查通过时将通过Django的CSRF检查的内容。默认为 False。

请注意,与不同CSRF_TRUSTED_ORIGINS,此设置不允许您区分CORS 信任读取资源的域和避免CSRF保护而信任更改资源的域。

启用此功能corsheaders.middleware.CorsPostCsrfMiddleware后django.middleware.csrf.CsrfViewMiddleware,还应该在之后 添加,MIDDLEWARE_CLASSES以撤消Referer替换:

MIDDLEWARE_CLASSES = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    ...
    'django.middleware.csrf.CsrfViewMiddleware',
    'corsheaders.middleware.CorsPostCsrfMiddleware',
    ...
]

你可能感兴趣的:(python,django)