django cors headers是一个django应用程序,用于处理跨源资源共享(cors)所需的服务器头。
django-cors-headers的Python项目详细描述
django cors标题
一个django应用程序,它将跨源资源共享(cors)头添加到 响应。这允许在浏览器中从 其他来源。
关于CORS
添加cors头允许您在其他域上访问资源。它的 重要的是,在添加标题之前,您必须了解其中的含义,因为 可能会无意中向其他人打开您网站的私人数据。
有关此主题的一些好的参考资料是:
- 维基百科页面
- MDN文章
- html5摇滚教程
要求
支持Python 3.5-3.7。
支持Django 1.11-2.2。
设置
从pip安装:
pip install django-cors-headers
然后将其添加到已安装的应用程序中:
INSTALLED_APPS=[...'corsheaders',...]
您还需要添加一个中间件类来监听响应:
MIDDLEWARE=[# Or MIDDLEWARE_CLASSES on Django < 1.10...'corsheaders.middleware.CorsMiddleware','django.middleware.common.CommonMiddleware',...]
应将Corsmidlware 放置在尽可能高的位置,尤其是在 可以生成响应的中间件,如django的 commonmiddleware 或 WhiteNoise的WhiteNoiseMiddle软件。如果不是以前,它就不能 将CORS标题添加到这些响应中。
如果您使用的是 cors_replace_https_referer 它应该放在 django的 csrfviewmiddleware (请参阅下面的更多内容)。
关于
django cors headers由Otto Yiu于2013年1月创建。它去了 自2015年8月起未维护,并于2016年1月交付给套餐 django-cors中间件 奥古斯丁在萨伏尔广场。 2016年9月,亚当·约翰逊、埃德·莫利等人获得维修 Django CORS标题的责任 ( 第110期) 来自奥托耀。 基本上,forked django cors中间件中的所有更改 合并回来,或者以不同的方式重新实现,所以应该可以 换回去。如果有未合并的功能,请打开一个问题 关于它。
django cors headers 已经有40多个贡献者 感谢他们每一个人。
配置
在django设置中配置中间件的行为。你是加入 允许跨站点请求的主机 cors_origin_whitelist ,或将 cors_origin_allow_all 设置为 true 允许所有主机。
cors_origin_allow_all
如果 为真,则不使用白名单,并接受所有来源。 默认为 假
cors_origin_白名单
授权进行跨站点http请求的来源列表。 默认为 []
原点的定义是 CORS RFC第3.2节 作为一个uri方案+主机名+端口,或者特殊值 'null' 。 默认端口(https=443,http=80)在这里是可选的。 特殊值 null 由浏览器发送到 "隐私敏感上下文" , 例如,当客户端从 文件:// 域运行时。
示例:
CORS_ORIGIN_WHITELIST=["https://example.com","https://sub.example.com","http://localhost:8080","http://127.0.0.1:9000"]
cors_origin_regex_白名单
一个字符串列表,表示与授权的源匹配的正则表达式 进行跨站点http请求。默认为 [] 。有用时 cors_origin_whitelist 不切实际,例如当您有大量 子域的。
示例:
CORS_ORIGIN_REGEX_WHITELIST=[r"^https://\w+\.example\.com$",]
以下是可选设置,默认设置可能就足够了。
cors_url_regex
一个regex,它限制将要为其发送cors头的url。 默认为 r'^.*$' ,即匹配所有URL。仅在需要COR时有用 在站点的一部分,例如位于 /api/ 的api
示例:
CORS_URLS_REGEX=r'^/api/.*$'
CORS允许方法
实际请求允许的http谓词列表。默认为:
CORS_ALLOW_METHODS=['DELETE','GET','OPTIONS','PATCH','POST','PUT',]
默认值可以导入为corsheaders.defaults.default\u方法,因此 可以用自定义方法扩展它。这样你就可以随时了解最新情况 任何未来的变化。例如:
fromcorsheaders.defaultsimportdefault_methodsCORS_ALLOW_METHODS=list(default_methods)+['POKE',]
CORS U ALLOW U标题
在生成实际的 请求。默认为:
CORS_ALLOW_HEADERS=['accept','accept-encoding','authorization','content-type','dnt','origin','user-agent','x-csrftoken','x-requested-with',]
默认值可以导入为corsheaders.defaults.default_headers 可以用自定义头扩展它。这使您能够跟上 任何未来的变化。例如:
pip install django-cors-headers0
cors_expose_headers
要向浏览器公开的http头列表。默认为 []
客户端/浏览器可以缓存飞行前响应的秒数。如果 这是0(或任何错误值),将不发送最大年龄头。默认为 86400 (一天)。
注意: 飞行前请求是在发出 "不太简单"请求(例如内容类型 应用程序/x-www-form-urlencoded )以确定服务器的请求 实际上接受。在 CORS MDN文章
CORS允许证书
如果 为真,则允许跨站点http中包含cookies 请求。默认为 假
注意:在django 2.1中,添加了设置会话cookie samesite rel="nofollow">会话cookie samesite设置,设置为 "拉克斯"' 默认情况下,这将阻止发送django的会话cookie 跨域。将其更改为 无 以绕过此安全限制。
CSRF集成
大多数站点需要利用跨站点请求伪造 保护 提供。cors和csrf是分开的,django没有办法使用你的cors 配置以使站点不受 引用程序的检查 安全请求。实现这一点的方法是使用它的csrf可信起源设置。 例如:
pip install django-cors-headers1
cors_replace_https_referer
在django 1.9中引入了csrf_trusted_origins,因此早期的用户 版本需要另一种解决方案。如果 cors_replace_https_referer 是 true , CorsMiddleware 将把 referer 头改为something 这将通过django的csrf检查,只要cors检查通过。默认为 错误
注意,与csrf_trusted_origins不同,此设置不允许您 区分cors和 通过避免CSRF保护,可信任的域可以更改资源。
启用此功能后,还应添加 corsheaders.middleware.corspostcsrfmidleware 之后 django.middleware.csrf.csrfviewmiddleware 中的 撤消 引用程序 替换:
pip install django-cors-headers2
信号
如果有一个用例需要的不仅仅是上述配置, 您可以附加代码来检查是否应允许给定的请求。例如, 这可用于从模型中读取允许的原点列表。附上任何 已启用检查请求的处理程序数 django信号 提供 请求 参数(在处理程序中使用 **kwargs 来保护 反对任何未来的论据。如果任何处理程序附加到 信号返回truthy值,请求将被允许。
例如,您可以定义这样的处理程序:
pip install django-cors-headers3
然后在应用程序就绪时使用a django appconfig连接
pip install django-cors-headers4
pip install django-cors-headers5
信号的一个常见用例是允许 all 原点访问一个子集 同时允许一组正常的源访问所有的url。 不可能只使用普通配置,但可以使用 信号处理器。
首先将cors_origin_白名单设置为 允许访问每个URL,然后将处理程序添加到 check_request_enabled 允许CORS,不管 不受限制的URL。例如:
pip install django-cors-headers6