cors 策略错误:对预检请求的响应未通过访问控制检查:没有'Access-Control-Allow-Origin

Posted

技术标签:

【中文标题】cors 策略错误:对预检请求的响应未通过访问控制检查:没有\'Access-Control-Allow-Origin【英文标题】:cors policy error : Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origincors 策略错误:对预检请求的响应未通过访问控制检查:没有'Access-Control-Allow-Origin 【发布时间】:2021-11-24 09:00:59 【问题描述】:

我已经安装了 django-cors-headers,这是 settings.py :

    ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS","").split()

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.auth.middleware.RemoteUserMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

还有:

    CORS_ALLOW_ALL_ORIGINS = True  
CORS_ALLOW_CREDENTIALS = True

但我在 chrome consloe 中收到此错误:

Access to XMLHttpRequest at 'https://event-alpha.mizbans.com/api/meetings/?memory=0' from origin 'https://alpha.mizbans.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.

【问题讨论】:

"CorsMiddleware 应该放在尽可能高的位置,尤其是在任何可以产生响应的中间件之前,例如 Django 的 CommonMiddleware 或 Whitenoise 的 WhiteNoiseMiddleware。如果不在之前,它将无法添加 CORS 头对这些回应。”尝试将'corsheaders.middleware.CorsMiddleware', 移到列表顶部。 我确实遇到了同样的问题,我真的很困惑 在这里查看答案***.com/questions/28046422/… 【参考方案1】:

我遇到了类似的问题,都是关于 CORS_ALLOW_ALL_ORIGINS。事实证明,它不适用于其他东西(抱歉,不记得什么了,也许是身份验证)。所以我不得不添加特定的起源。这是我的整个设置:

# CORS SETUP
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
    'http://localhost:4200',
    'http://127.0.0.1:4200'
]

CSRF_COOKIE_HTTPONLY = True
SESSION_COOKIE_HTTPONLY = True

SESSION_COOKIE_SAMESITE = 'None'
CSRF_COOKIE_SAMESITE = 'None'

对我来说,现在可以使用这种组合。

【讨论】:

还是不行:( 您需要将您的主机添加到来源列表:alpha.mizbans.com。允许所有来源通常是个坏主意,如果您有身份验证 (AFAIR) 将无法正常工作 我正在使用 dj rest auth 登录并将 jwt 发送到另一个服务以登录和注册,它在我的电脑上运行良好,但我在部署的版本上遇到 cors 策略错误,所以这可能是导致问题的原因? 您是否按照我的建议列出了已部署的服务器?

以上是关于cors 策略错误:对预检请求的响应未通过访问控制检查:没有'Access-Control-Allow-Origin的主要内容,如果未能解决你的问题,请参考以下文章

角 POST 请求被 CORS 策略阻止:对预检请求的响应未通过访问控制检查

CORS 策略已阻止从源“null”访问 XMLHttpRequest:对预检请求的响应未通过访问控制 [重复]

来源已被 CORS 策略阻止 对预检请求的响应未通过访问控制检查

CORS 策略:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态

被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP OK 状态

domain.com 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态