Python Django CORS headers白名单没有';行不通
我正在处理一个现有的代码库,它由一个Django后端和一个ReactJS前端组成。 所有内容都已停靠,因此我在Python Django CORS headers白名单没有';行不通,python,django,header,cors,Python,Django,Header,Cors,我正在处理一个现有的代码库,它由一个Django后端和一个ReactJS前端组成。 所有内容都已停靠,因此我在localhost:8001上运行后端,在localhost:3000上运行前端 因为我在浏览器中遇到了CORS错误,所以我将其添加到Django。然而,当我添加CORS\u ORIGIN\u ALLOW\u ALL=True时,我得到一个错误 已阻止跨源请求:同源策略不允许读取“”处的远程资源。(原因:如果CORS标头“Access Control Allow Origin”为“*”,
localhost:8001
上运行后端,在localhost:3000
上运行前端
因为我在浏览器中遇到了CORS错误,所以我将其添加到Django。然而,当我添加CORS\u ORIGIN\u ALLOW\u ALL=True
时,我得到一个错误
已阻止跨源请求:同源策略不允许读取“”处的远程资源。(原因:如果CORS标头“Access Control Allow Origin”为“*”,则不支持凭据)
因此,我添加了以下设置:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
'http//:127.0.0.1:3000',
'http//:127.0.0.1:8001',
)
但是,我得到了一个错误的说法
缺少CORS标头“访问控制允许来源”
为什么白名单不起作用?我在这里做错了什么吗?在浏览器中安装任何跨源浏览器扩展当您在本地运行前端代码时,这将很有帮助 并更改白名单url,如下所示(//:应为://):
当您拥有
CORS\u ORIGIN\u ALLOW\u ALL=True
时,这将设置Access Control ALLOW ORIGIN:
,并且正如允许所有域进行跨源请求时出现的错误所示,您无法随请求传递凭证
标志。因此,如果您希望将标题保持为访问控制允许来源:
,最简单的修复方法是在从前端发送CORS请求时不使用凭证
标志
如果您只想允许特定的域(这是最好的),您需要首先找到有效的域。请记住,这些域是向Django发送请求的原始域。你可以通过查看找到它们request.META
是WSGI看到并传递的环境,如果中间有一些代理,则会给出代理链中的最后一个主机
如果您有一个与WSGI对话的web服务器,例如nginx
,它将把远程\u主机
传递给您的Django应用程序或您拥有的任何中间WSGI服务器(例如uWSGI
/gunicorn
),然后他们将其传递给您的应用程序
此外,在您的设置中,
CORS\u ORIGIN\u WHITELIST
中的URL格式错误;scheme和netloc之间的分隔符是://
,而不是/:
,例如:
http://127.0.0.1:3000
输入错误:问题中显示的设置值以
http/:
开头,但它们应该以http://
开头。
http://127.0.0.1:3000