django cors headers是一个django应用程序,用于处理跨源资源共享(cors)所需的服务器头。

django-cors-headers的Python项目详细描述


django cors标题

https://travis-ci.org/adamchainz/django-cors-headers.svg?branch=masterhttps://img.shields.io/pypi/v/django-cors-headers.svghttps://img.shields.io/badge/code%20style-black-000000.svg

一个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-headers
0

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-headers
1

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-headers
2

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Kafka不能均匀地填充主题中的分区   java jtable编辑列拖动,调用setValueAt和怪异列,通过什么?   从jfilechooser选择的java复制文件   JavaGroovy:替换捕获组的惯用方法   java Mule http:inboundendpoint获取请求体   JavaGWT:从同级中删除类   java理解日历时间,需要澄清   java为什么我的返回值在我的main方法中不包含值?   Java两个文件的哈希和数组匹配比较   基于java Xpathtime的函数及其工作示例   压缩MSAccess数据库(.accdb),而不安装MSAccess,最好使用Java   java我应该使用什么接口或抽象类?   java大十进制数学运算   java如何在@JobScope上创建springbatch作业本身?   java如何更新一个文件。里面有jar文件。ear文件并保存。使用bash脚本的ear文件   java使用用户输入访问元素数组   java如何在Android上监控多个传感器?   使用数组的索引在java中设置数组的值