项目托管在子路径中时缺少 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。
我有一个托管在 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。