我已经在Django上开发了自己的网站一段时间了,今天我开始学习如何部署它。我将此添加到我的settings.py:
SECURE_SSL_REDIRECT = True,
这导致开发服务器停止正常工作,并显示以下错误消息:
[13/Jan/2018 16:56:49] code 400, message Bad request syntax ('\x16\x03\x01\x00À\x01\x00\x00¼\x03\x03ßà\x84¼+Jnßþn-ñ\x88ý©vAþK\x83¤²êT\x86\x0b.\x8em\x0b:â\x00\x00\x1cÚÚÀ+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x00')
[13/Jan/2018 16:56:49] code 400, message Bad HTTP/0.9 request type ('\x16\x03\x01\x00À\x01\x00\x00¼\x03\x03\x87')
[13/Jan/2018 16:56:49] You're accessing the development server over HTTPS, but it only supports HTTP.
[13/Jan/2018 16:56:49] You're accessing the development server over HTTPS, but it only supports HTTP.
[13/Jan/2018 16:56:49] code 400, message Bad request version ('JJÀ+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x00')
[13/Jan/2018 16:56:49] You're accessing the development server over HTTPS, but it only supports HTTP.
为什么我的服务器停止正常工作?
请注意,当我将设置更改回SECURE_SSL_REDIRECT = False
时,问题并没有消失。
答案 0 :(得分:5)
您已将django网站配置为通过设置SECURE_SSL_REDIRECT = True
来强制执行https - 这对于生产设置非常好。
如果将SECURE_SSL_REDIRECT设置为True,SecurityMiddleware将永久(HTTP 301)将所有HTTP连接重定向到HTTPS。
出于这个原因(以及其他原因),您通常会有单独的开发和生产设置。有几件事几乎总是不同的。
阅读本文以了解一些如何处理它的方法:Django: How to manage development and production settings?
注意强>
如果您的浏览器从您的站点收到301一次 - 更改设置可能没有直接影响,因为浏览器缓存了目标URL并且没有在HTTP上发送请求。在这种情况下,您需要清除或禁用浏览器缓存。
答案 1 :(得分:4)
浏览器在与http
一起使用时,已缓存来自上一个请求的https
-> SECURE_SSL_REDIRECT=True
重定向。
关闭服务器端不会影响该缓存的重定向。
您可以有选择地清除开发服务器的url / ip(不是浏览器缓存中的所有内容),并通过以下方式使事情起作用:
http://127.0.0.1:8000
-它会给您一个404 http://127.0.0.1:8000
答案 2 :(得分:0)
如果您是团队的成员,则可以使用变量来设置开发环境。例如DJANGO_DEV=development
之后,您可以检查当前环境是否为DEV env并设置特定值。
在此answer
上了解有关此方法的更多信息