django-cors-headers 不起作用:请求的资源上不存在'Access-Control-Allow-Origin'标头



完全错误:

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.

在trello.com 时,我正在从分机进行API调用

我的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',
]

尝试了这里提到的所有内容后,无法使其工作。事实上,django-cors头文件中提到的所有内容都已经在我的settings.py.中了

经过一番深入调查,我发现罪魁祸首是"中间件";settings.py中的定义本身。根据我的django版本(它是1.7(;MIDDLEWARE_CLASSES";而不是";中间件";。当你查看django的中间件文档时,你可以发现这一点,可以在这里找到https://docs.djangoproject.com/en/1.8/topics/http/middleware/(别忘了从右下角选择你的django版本(。当这个更改完成后,我的飞行前开始返回所需的响应标头。

我仍然在挠头,想着解决一个花了我几个小时的问题(当发现时(有多简单:(

我看了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".*",
]

相关内容

最新更新