<p>这个问题在我看来是<a href="https://en.wikipedia.org/wiki/XY_problem" rel="nofollow noreferrer">XY problem</a>的一个例子。在下面的课文中,我将回到我的主张并解释它。在</p>
<p>OP使用Django REST框架编写了一个restapi。忽略这些信息最初会导致注意力非常低。包括这些信息之后,事情变得更清楚了。在</p>
<p>让我们首先回顾一下restapi的一些基本知识。restapi与语言无关。它不关心客户机是用哪种语言编写的,客户机也不关心API是用哪种语言编写的。restapi可以通过不同的方式访问(使用):从命令行使用<code>curl</code>;从用任何编程语言编写的脚本;从使用(很可能)JavaScript(或JavaScript框架)的浏览器。在</p>
<p>由于有两个网站在使用API,OP希望为他们提供对API的访问。出现的障碍是CSRF(跨站点请求伪造)。<br/>
Django使用CSRF令牌实现了CSRF保护。这意味着我们保护我们的网站不受来自其他网站的请求,在那里通常可以将表格张贴到我们的网站上。在</p>
<p>在实际情况下,客户机是两个不同的网站托管在不同的域,因此来自他们的请求来自不同的网站。运营商真正想知道的是:<br/>
<em>“如何授予或限制访问使用我的API的其他网站?”</em><br/>
而不是:<br/>
<em>“如何处理CSRF问题?”</em></p>
<p>Django REST Framwork的官方文档有一个专门针对这个问题的页面:<br/>
<a href="http://www.django-rest-framework.org/topics/ajax-csrf-cors/" rel="nofollow noreferrer">Working with AJAX, CSRF & CORS</a></p>
<p>以下是CORS部分:</p>
<blockquote>
<p>Cross-Origin Resource Sharing is a mechanism for allowing clients to interact with APIs that are hosted on a different domain. CORS works by requiring the server to include a specific set of headers that allow a browser to determine if and when cross-domain requests should be allowed.</p>
<p>The best way to deal with CORS in REST framework is to add the required response headers in middleware. This ensures that CORS is supported transparently, without having to change any behavior in your views.</p>
<p>Otto Yiu maintains the django-cors-headers package, which is known to work correctly with REST framework APIs.</p>
</blockquote>
<p>我要强调第一句话:</p>
<blockquote>
<p><strong>Cross-Origin Resource Sharing is a mechanism for allowing clients to interact with APIs that are hosted on a different domain.</strong></p>
</blockquote>
<p>确实如此。OP希望允许客户端与托管在不同域上的API进行交互。<br/>
最后一句话建议使用<code>django-cors-headers</code>,这是问题的解决方案。<br/>
关于该应用程序使用的所有详细信息可以在其文档中找到。在</p>