Django 重定向 http -> https

28

我在运行:

python manage.py runserver localhost:44100

这会将我重定向到https

» http http://localhost:44100/
HTTP/1.0 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Date: Mon, 05 Mar 2018 14:09:09 GMT
Location: https://localhost:44100/
Server: WSGIServer/0.1 Python/2.7.14
X-Frame-Options: SAMEORIGIN
为什么 / 如何发生这种情况?哪个设置控制了Django是否接受http / https请求?
为什么/如何会出现这种情况?有哪些设置可以控制Django是否接受http或https请求?
2个回答

43

runserver 命令只能处理 http 请求。

但如果你的 SECURE_SSL_REDIRECT 设置为 True,则会从 http 自动重定向到 https。

有关更多信息,请参见 Django 文档中关于SSL/HTTPS的说明。


我该如何将其恢复到以前的设置以在开发模式下进行测试? - Remo Bajwa
2
@RemoBajwa 您可以将 SECURE_SSL_REDIRECT=False 设置为假或从您的设置中删除该行。另一个选项可能是将 SECURE_SSL_REDIRECT = True 移动到 if 语句中,例如 if not DEBUG:。一旦您更改了设置,请清除浏览器缓存,以便它不会继续重定向。 - Alasdair
谢谢!由于我的浏览器接收到了永久重定向(301),我不得不清除页面缓存才能使其正常工作。 - undefined
1
还有一件需要注意的事情,如果你正在从一个环境变量中设置.env文件,不要这样做SECURE_SSL_REDIRECT=os.environ['SECURE_SSL_REDIRECT'],因为这是一个字符串而不是布尔值,不会像你期望的那样被评估为True。 - undefined

35

我最好的猜测是,在您项目的settings.py文件中设置了

SECURE_SSL_REDIRECT = True

这会导致您的http重定向到https。您可以在这里阅读有关它的内容。

如果是这种情况,您可能需要移除该行并清除浏览器缓存,然后才能按预期工作。


这个对我有用,我正在使用Heroku作为Django应用程序的主机。 - Karam Qusai
3
"清除浏览器缓存" 拯救了我的生命。感谢 @Saransh - Ashish Johnson
@AshishJohnson:很高兴能帮忙,因为我遇到过类似的问题,如果没有清除缓存。 - Saransh Singh
@AshishJohnson,实际上我认为删除搜索历史可以解决问题。如果有人需要保留缓存和Cookie。 - Tomás Gomez Pizarro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接