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

为什么Django特定路由拒绝HTTP连接但其他路由HTTP访问正常?

问题核心原因排查方向

你遇到的强制HTTPS跳转问题和HSTS、Django安全配置、浏览器缓存三个层面有关,按如下顺序排查即可解决,不需要重建项目:

1. 优先排查Django全局安全配置遗漏

检查settings.py中除了SECURE_HSTS_SECONDS之外的安全配置项:

  • 确认SECURE_SSL_REDIRECT的值是否为True,该配置会直接让Django将所有HTTP请求重定向到HTTPS,是最常见的跳转原因
  • 确认是否配置了SECURE_REDIRECT_EXEMPT,如果该列表里包含了works/路由但未包含projects/,就会出现你描述的不同路由表现不同的情况
  • 确认是否引入了django-sslify、django-secure等强制HTTPS的第三方包,这类包的优先级高于Django原生安全配置

2. 排查是否是浏览器301永久重定向缓存导致

Django默认开启SSL重定向时返回的是301永久重定向,该状态码会被浏览器长期缓存,即便你后续修改了后端配置,浏览器依然会直接跳转HTTPS:

  • 直接用curl命令测试后端返回结果,排除浏览器缓存干扰:
    curl -v http://localhost:8000/projects/
    
    如果返回状态码是200,说明后端配置已经生效,问题出在浏览器缓存,清除浏览器全部缓存(包括静态文件、浏览历史、Cookie)或者用无痕模式访问即可
    如果返回301/302跳转到HTTPS,说明问题还是出在后端配置

3. 排查projects应用的单独配置

因为只有projects/前缀的路由出现问题,要检查projects应用内部的配置:

  • 检查projects/urls.py中是否给路由加了@require_https之类的装饰器
  • 检查projects应用的views中是否有单独的HTTPS校验逻辑
  • 确认项目是否配置了多环境settings,你修改的配置是否和当前运行服务加载的settings是同一个文件,可以在视图中打印对应配置项的值确认生效状态

4. 排查反向代理配置

如果你的服务前部署了Nginx、Caddy等反向代理,确认代理层面是否配置了projects/路径的HTTPS跳转规则,代理层的跳转优先级高于Django本身的配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:09:03