You need to enable JavaScript to run this app. Django+Angular应用仅在部署阶段出现401 HTTP错误
优惠活动
大模型
产品
解决方案
定价
更多

Django+Angular应用仅在部署阶段出现401 HTTP错误

部署后django-rest-knox认证返回401的排查与解决方案

按问题发生概率从高到低依次排查:

  • Apache未正确转发Authorization请求头(最高发原因)
    Apache默认会剥离前端请求携带的Authorization头部,导致Knox无法读取到token完成校验。
    解决方法:
    1. 打开站点对应的Apache配置文件(路径一般为/etc/apache2/sites-available/下的对应.conf文件)
    2. 在<Directory>配置块内添加配置项:
      WSGIPassAuthorization On
      
    3. 重启Apache服务生效:sudo systemctl restart apache2
      可先在后端接口打印request.META.get("HTTP_AUTHORIZATION")确认,如果返回None,直接套用上述配置即可。
  • CORS配置缺失认证头支持
    本地开发阶段CORS限制较松,线上如果未校准配置会导致认证头被跨域规则拦截:
    1. 检查Django配置中的CORS_ALLOW_HEADERS列表,必须显式包含authorization字段
    2. 确认CORS_ALLOW_CREDENTIALS = True未被误设为False
    3. 检查Angular端请求配置,确认跨域请求已开启withCredentials: true,否则默认不会携带认证头
  • 域名白名单配置不匹配
    本地运行使用localhost时不会触发域名限制,线上环境需要确认:
    1. settings.py中的ALLOWED_HOSTS已加入线上实际访问的域名/公网IP
    2. CORS_ALLOWED_ORIGINS已完整配置前端访问的实际地址,注意协议(HTTP/HTTPS)要完全匹配,不要写错
  • Knox token校验不匹配
    已确认admin面板存在token的前提下,进一步排查:
    1. 确认线上环境的SECRET_KEY未被重置:Knox的token哈希和服务端SECRET_KEY绑定,如果线上和本地的SECRET_KEY不一致,相同token字符串也会校验失败
    2. 确认线上使用独立的数据库,不要直接复用本地的token:本地数据库的token存储到线上库时会因为哈希规则不匹配失效
    3. 检查Angular端的token存储逻辑:如果之前用localStorage存储localhost的token,切换线上域名后会出现读取不到token的问题,导致请求携带空的认证头
  • HTTPS配置不兼容
    若线上启用HTTPS而本地为HTTP运行模式,需要补充以下配置:
    1. settings.py中添加SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https'),告知Django请求已通过代理完成HTTPS校验
    2. 排查前端是否存在混合内容拦截:HTTPS页面发起HTTP API请求会被浏览器直接拦截,导致认证头无法正常传递

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 09:36:05