繁体   English   中英

在 Django 请求中获取请求源

[英]Getting the request origin in a Django request

所以我正在尝试在Django中启用跨源资源共享,这样我就可以发布到外部站点,并且在我设置时很容易做到

response["Access-Control-Allow-Origin"]="*" 

但我想让它检查来源是否在允许的来源列表中(本质上是将其限制为仅允许特定站点),但我似乎无法在 Django 请求中找到可以获取来源信息的任何地方。

我尝试使用request.META['HTTP_HOST']但这只是返回发布到的站点。 有谁知道我可以在 Request 对象的哪个位置获取请求的来源?

至于从request中获取 url(这是我正在寻找的),请改用request.META['HTTP_REFERER']

在 Django 中,

request.headers['Origin']

回答原来的问题。

您可以print(request.headers)查看标题中可用的所有内容。

我强烈建议您使用django-cors-headers 它允许您定义CORS_ORIGIN_WHITELIST ,它是以更 Python 的方式允许的来源列表。

要回答“有谁知道我可以在 Request 对象中的什么位置获取请求的来源?”这个问题,request.META['REMOTE_ADDR'] 会满足您的需求吗?

你可以通过 request.META{"HTTP_ORIGIN"]

在 Django 2.2 中使用:

request.META.get('HTTP_REFERER')

确保请求属性没有 mode = no-cors

看:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin

“上述规则有一些例外情况;例如,如果在 no-cors 模式下发出跨域 GET 或 HEAD 请求,则不会添加 Origin 标头。”

用这个:

origin = request.META.get("HTTP_ORIGIN")

这是django-cors-headers中间件中使用它的方式:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM