Cec*_*uez 11 python django http cors django-cors-headers
我正在尝试从不同子域上的 React Native Web 前端对 Django 进行 POST 调用。
我以为我已经正确配置了 CORS,但事实似乎并非如此。
这是我的 Django settings.py 的样子:
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_HEADERS = ['*']
CORS_ALLOWED_ORIGINS = ['https://api.example.com', 'https://example.com', 'https://www.example.com' ]
CSRF_TRUSTED_ORIGINS = [
'https://api.example.com', 'https://example.com', 'https://www.example.com'
]
ALLOWED_HOSTS = ["0.0.0.0", "api.example.com", "example.com"]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
]
INSTALLED_APPS = [
...
'corsheaders',
...
]
Run Code Online (Sandbox Code Playgroud)
我到底做错了什么?我收到的错误是这样的:
Access to XMLHttpRequest at 'https://api.example.com/api/v1/pagescreate/' from origin 'https://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)
这是我的 Django 视图:
class PageCreateView(generics.CreateAPIView):
queryset = Page.objects.all()
serializer_class = PageSerializer
Run Code Online (Sandbox Code Playgroud)
可能是什么原因造成的?我是否缺少 React 中的某些设置?我正在使用 axios 进行调用,唯一的标头是"Content-Type": "application/json"
编辑:这可能是由于我的服务器上的某些 nginx 规则造成的吗?或者也许是我的 Kubernetes 配置?我正在使用 Docker 设置容器,并且可以轻松链接 Dockerfile 或我的 Kubernetes 设置中的任何信息
我认为,这可能是由于设置中中间件的顺序造成的。(虽然我也不是完全有信心)
您可以尝试以下中间件序列吗
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"corsheaders.middleware.CorsMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
Run Code Online (Sandbox Code Playgroud)
然后删除
CORS_ALLOW_HEADERS = ['*']
Run Code Online (Sandbox Code Playgroud)
从设置。
让我知道这是否有效
Gre*_* II -1
您确定 CORS_ALLOW_HEADERS 允许您设置“*”吗?
基于这里,看起来它的设计目的是扩展而不是替换: https://github.com/adamchainz/django-cors-headers/blob/2d22268ff59aa0b79820ea5b8983efd1e514ec4c/README.rst#cors_allow_headers 这个测试也让我认为它需要扩展而不是替换 https://github.com/adamchainz/django-cors-headers/blob/5067faefeb22beffcf1b12dd7ad9d3fb6d4b26e4/src/corsheaders/checks.py#L20-L21
我建议尝试使用默认值或尝试从上面的链接扩展它
我相信这是特定于库的值,而不是浏览器或请求 CORS 值
编辑:添加了 github.com 的测试链接
归档时间: |
|
查看次数: |
14800 次 |
最近记录: |