django-cors-header无法正常工作:请求的资源上不存在“Access-Control-Allow-Origin”标头

bejyjqdl  于 2022-11-18  发布在  Go
关注(0)|答案(2)|浏览(155)

完整错误:
Access to XMLHttpRequest at 'https://[redacted]/api/get_match_urls/' from origin 'https://trello.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我在访问www.example.com时从扩展进行API调用trello.com
我在INSTALLED_APPS中有corsheaders。我在中间件中尽可能高的位置有'corsheaders.middleware.CorsMiddleware'。并且我将CORS_ORIGIN_ALLOW_ALL设置为True。是的,我已经尝试了替代别名CORS_ALLOW_ALL_ORIGINS,它仍然不起作用。有人有什么想法吗?

MIDDLEWARE = [
    
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    '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',
]
scyqe7ek

scyqe7ek1#

我看了一下corsheaders.middleware.CorsMiddleware,如果设置CORS_ALLOW_ALL_ORIGINS而不是CORS_ALLOW_CREDENTIALS,它将返回Access-Control-Allow-Origin: *,但如果同时设置CORS_ALLOW_CREDENTIALS,它将从请求头返回原点。
下面是执行此操作的代码部分

origin = request.META.get("HTTP_ORIGIN")

# omiting the lines in between

if conf.CORS_ALLOW_ALL_ORIGINS and not conf.CORS_ALLOW_CREDENTIALS:
    response[ACCESS_CONTROL_ALLOW_ORIGIN] = "*"
else:
    response[ACCESS_CONTROL_ALLOW_ORIGIN] = origin

另一个想法是也使用CORS_ALLOWED_ORIGIN_REGEXES

CORS_ALLOWED_ORIGIN_REGEXES = [
    r".*",
]
jv4diomz

jv4diomz2#

在尝试了这里提到的所有东西之后,仍然无法使它工作。事实上,在django-cors-headers文档中提到的所有东西都已经在我的settings.py中了。
在深入调查之后,我发现罪魁祸首是settings.py中的“中间件”定义本身。(它是1.7)它需要是“MIDDLEWARE_CLASSES”而不是“MIDDLEWARE”。你可以在django的中间件文档中找到这一点,可以在这里找到https://docs.djangoproject.com/en/1.8/topics/http/middleware/(别忘了从右下角选择你的django版本)当这个修改完成后,我的preflight开始返回所需的响应头。
我还在挠头,想着这个问题的解决方案(当被发现时)有多简单,这个问题花了我几个小时

相关问题