You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django4与Angular跨域请求被CORS拦截问题排查

问题分析与解决方案

错误原因

错误提示明确指出:Request header field pragma is not allowed by Access-Control-Allow-Headers,这说明你的Django CORS配置中没有允许前端发送的pragma请求头,同时当前的CORS_ALLOW_HEADERS配置完全错误——你填的是CORS响应头字段,而非需要允许的前端请求头字段。

修正步骤

1. 修复CORS_ALLOW_HEADERS配置

将CORS_ALLOW_HEADERS修改为包含pragma以及前端常用请求头的列表,比如:

CORS_ALLOW_HEADERS = [
    'pragma',
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
]

或者更简洁的方式,基于默认允许的头扩展:

from corsheaders.defaults import default_headers

CORS_ALLOW_HEADERS = default_headers + (
    'pragma',
)

2. 清理冗余CORS配置

你同时设置了CORS_ORIGIN_ALLOW_ALL = True和CORS_ALLOWED_ORIGINS、CORS_ORIGIN_WHITELIST,这会导致后两者被忽略(当CORS_ORIGIN_ALLOW_ALL为True时,所有来源都被允许)。如果仅需允许特定前端地址,建议将CORS_ORIGIN_ALLOW_ALL设为False,保留CORS_ALLOWED_ORIGINS即可,避免配置冲突。

3. 确认中间件顺序

你的中间件中corsheaders.middleware.CorsMiddleware已放在django.middleware.common.CommonMiddleware之前,这是正确配置,无需修改。

修正后的示例配置

ALLOWED_HOSTS = ['192.168.1.195','127.0.0.1','localhost']

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'host_manager.apps.HostManagerConfig',
    'corsheaders',
]

# 仅允许指定前端地址,关闭全局允许
CORS_ORIGIN_ALLOW_ALL = False
CORS_ALLOWED_ORIGINS = [
    "http://192.168.1.195:4200",
    "http://127.0.0.1:4200",
    "http://localhost:4200",
]

# 允许包含pragma的请求头
from corsheaders.defaults import default_headers
CORS_ALLOW_HEADERS = default_headers + (
    'pragma',
)

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

内容的提问来源于stack exchange,提问作者harp1814

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:25:22