【问题标题】:Django and CORS policy with multiple allowed hosts具有多个允许主机的 Django 和 CORS 策略
【发布时间】:2019-11-22 21:41:25
【问题描述】:

我有一个使用 NGINX 和 gunicorn 在 ubuntu 服务器上运行的小型 Django 项目。

当用户访问 www.example.com 时一切正常,但是,当用户访问 example.com 而不是 www.example.com 时,它就崩溃了。我在 fetch 命令中使用了一些 javascript,从我的 API (Django REST) 获取数据并返回:

Access to fetch at 'https://www.example.com/builds/apidata/4' 
from origin 'https://example.com' has been blocked by CORS 
policy: No 'Access-Control-Allow-Origin' header is present on the requested 
resource. If an opaque response serves your needs, set the request's mode to 
'no-cors' to fetch the resource with CORS disabled.

我找到的最简单的解决方案是从我的ALLOWED_HOSTS 文件中的ALLOWED_HOSTS 中删除example.com,但是当用户忘记www. 时,他们将收到404 错误。

CORS 错误消息还指出我可以更改请求模式,但我不知道这样做的安全隐患..

我还尝试在我的域设置上使用从 example.com 到 www.example.com 的重定向,但这似乎也不起作用。

任何建议将不胜感激!

【问题讨论】:

    标签: javascript django django-rest-framework cors


    【解决方案1】:

    虽然您当然可以使用 CORS 来允许这种跨域使用,但更简单、更简洁的解决方案是只允许一个根域 — 使用 www 或不使用。

    PREPEND_WWW 设置为True 是一种确保请求始终使用www 版本的简单方法,因为它会导致CommonMiddleware 在使用非www 版本时发出重定向。

    【讨论】:

      【解决方案2】:

      在您的网络服务器配置中,您可以在 www 子域中添加 Access-Control-Allow-Origin 标头,这将允许来自您的根域的请求。

      这可行:Access-Control-Allow-Origin: https://example.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-17
        • 2020-04-30
        • 2019-01-04
        • 2019-12-18
        • 2020-06-06
        • 2020-05-13
        • 1970-01-01
        • 2020-10-17
        相关资源
        最近更新 更多