Wagtail项目运行runserver时HTTPS访问报错400请求无效求助
解决Wagtail/Django开发服务器HTTPS强制跳转导致的400 Bad Request错误
你遇到的核心问题是浏览器强制将HTTP请求重定向到HTTPS,但Django的开发服务器本身不支持HTTPS,所以抛出了400错误——哪怕你输入的是http://54.23x.9x.17:8000,浏览器也自动切换到HTTPS访问,这才是问题根源。下面按优先级给出针对性解决方案:
1. 彻底清除Chrome的HSTS缓存(最可能解决问题)
你之前尝试过清除HSTS,但可能操作不够彻底,按以下步骤再试一次:
- 打开Chrome,地址栏输入
chrome://net-internals/#hsts - 找到Delete domain security policies区域,输入你的AWS服务器公网IP(比如
54.23x.9x.17),点击「Delete」 - 切换到Query HSTS/PKP domain,输入同一个IP点击「Query」,确认返回「Not found」,说明HSTS记录已删除
- 关闭所有Chrome窗口,重新打开后访问
http://54.23x.9x.17:8000
2. 检查并修正Django/Wagtail的SSL相关配置
除了SECURE_SSL_REDIRECT = False,还有两个关键设置会强制浏览器用HTTPS,确保它们也设为False:
打开settings.py文件,修改以下配置:
SECURE_SSL_REDIRECT = False SESSION_COOKIE_SECURE = False CSRF_COOKIE_SECURE = False
保存后重启开发服务器,再尝试访问。
3. 验证开发服务器本身的HTTP服务正常
在AWS服务器终端执行以下命令,测试本地访问是否正常:
curl http://localhost:8000
如果能正常返回页面内容,说明服务器本身没问题,问题确实出在浏览器的HTTPS强制跳转上。
4. 换用其他浏览器测试
有时候Chrome的缓存或HSTS记录很难彻底清除,换用Firefox、Safari或Edge等浏览器,直接访问http://54.23x.9x.17:8000。如果其他浏览器能正常加载,说明是Chrome的配置问题,可以尝试重置Chrome设置来彻底解决。
5. 临时方案:用HTTPS启动开发服务器(不推荐生产环境)
如果上面的方法都无效,你可以临时让Django开发服务器支持HTTPS,借助django-extensions的runserver_plus命令:
- 先安装依赖:
pip install django-extensions werkzeug
- 生成自签名SSL证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
- 用证书启动服务器:
python3 manage.py runserver_plus 0.0.0.0:8000 --cert-file cert.pem --key-file key.pem
这时你可以用https://54.23x.9x.17:8000访问,浏览器会提示证书不安全,选择继续访问即可。
内容的提问来源于stack exchange,提问作者A K Bharath
相关产品推荐
相关产品推荐

