项目托管在子路径中时缺少 CORS header

CORS header missing when project hosted in a Subpath

我有一个托管在 url 上的 Django(v2.2) 项目,看起来像 https://some.example.com/mypath/blog/create 处有一个 API 端点。 我需要从 https://some.example.com/anotherpath/ofmine/ 发出一个 POST 请求(使用 axios),但这在 Firefox 71.0 中给我一个 301 错误并显示以下消息:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://some.example.com/mypath/blog/create/. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://some.example.com/mypath/blog/create/. (Reason: CORS request did not succeed).

但是,我可以轻松地向本地托管的开发服务器发出相同的请求。

相关设置:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',
    'rest_framework_docs',
    'corsheaders',                                                          
    'django_extensions',
    ...
]

USE_X_FORWARDED_HOST = True
FORCE_SCRIPT_NAME = '/mypath'
CORS_ORIGIN_ALLOW_ALL = True

错误的原因和可能的解决方法是什么?

根据 django-cors-headers 文档,您需要设置 CORS_ORIGIN_WHITELIST 以包含您的端点,或将 CORS_ORIGIN_ALLOW_ALL 设置为 True 以允许所有主机(虽然不推荐用于生产)。

愚蠢的错误。 some.example.com 重定向到 www.some.example.com 所以我一直在尝试从 www.some.example.com 访问 some.example.com 的 API(它不存在,因此是 301)。在请求 url 上加上 www 前缀,它工作正常;当然,我什至不需要 CORS headers。