Django rest 框架和跨源请求

Posted

技术标签:

【中文标题】Django rest 框架和跨源请求【英文标题】:Django rest framework and cross origin requests 【发布时间】:2017-05-22 05:11:53 【问题描述】:

我尝试从 javascript 客户端发出一些请求,以使用 Django 休息框架构建休息 api。 对 /api/test 的所有 GET 请求都是公开的,因此不需要会话、令牌或水。 所有 POST 到 api/test 都是私有的,用户必须使用 oauth2

根据the documentation,我必须使用django-core-headers 管理跨源请求。将此模块安装到我的 django 后,我设置了 CORS_ORIGIN_ALLOW_ALLTrue 但是: 1)这是一个好习惯吗? 2) 是否有一个好的解决方案只允许在某些点上进行跨域请求?

谢谢

【问题讨论】:

【参考方案1】:

使用 django-core-headers,您可以使用 CORS_ORIGIN_WHITELISTCORS_ORIGIN_REGEX_WHITELIST 限制 CORS 来源。如果您不需要 允许任意来源,请设置它们;否则,你很好。

如果您愿意,您可以编写一个装饰器来检查您的视图中的原点,以查看它是否与所需的原点匹配(也许在跟踪哪些用户被授权进行 POST 请求的任何模型上设置了一些东西?)。但是,如果您允许来自任意来源的 GET 请求,并且不关心 POST 请求的来源,只要它们被授权,那么您就很清楚了——毕竟,如果您不这样做,您如何限制来源'不知道客户可能从哪里提出请求?

【讨论】:

感谢您的回答。不幸的是,可以从客户浏览器完成请求,然后我无法设置白名单:(

以上是关于Django rest 框架和跨源请求的主要内容,如果未能解决你的问题,请参考以下文章

Angular2,REST 服务 POST 调用错误:“跨源请求被阻止”

在 Spring Data Rest 中启用跨源请求

Django REST框架-请求与响应

无法在 Django 网站中发布跨源请求

在 Django 中启用 CORS(跨源请求)

Django AJAX 错误:仅协议方案支持跨源请求