所以我正在尝试在 Django 中启用跨源资源共享,这样我就可以发布到外部站点,当我设置
response["Access-Control-Allow-Origin"]="*"
但我想让它检查源是否在允许的源列表中(基本上是将其限制为仅允许特定站点),但我似乎在 Django 请求中找不到我可以获取源信息的任何地方。
我尝试使用请求。META['HTTP_HOST'],但这只返回正在发布的网站。有谁知道我可以在请求对象中的哪个位置获得请求的来源?
至于从request
获取网址(这是我正在寻找的),请改用request.META['HTTP_REFERER']
。
在 Django 中,
request.headers['Origin']
回答原始问题。
您可以print(request.headers)
查看标题中可用的所有内容。
使用这个:
origin = request.META.get("HTTP_ORIGIN")
这是django-cors-headers
中间件中使用它的方式:
你可以通过请求获得它。META["HTTP_ORIGIN"]
我强烈建议你使用 django-cors-headers。它允许您以更pythonic的方式定义CORS_ORIGIN_WHITELIST
这是允许的源列表。
要回答"有谁知道我可以在请求对象中的哪个位置获得请求的来源?",请求。META['REMOTE_ADDR'] 给你你需要的东西?
在 Django 2.2 中使用:
request.META.get('HTTP_REFERER')
确保请求属性没有模式 = no-cors
看:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin
"上述规则有一些例外;例如,如果在no-cors模式下发出跨源GET或HEAD请求,则不会添加Origin标头。