Django说我的开发服务器不支持HTTPS,即使我已禁用它

时间:2018-01-13 17:09:28

标签: django

我已经在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时,问题并没有消失。

3 个答案:

答案 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(不是浏览器缓存中的所有内容),并通过以下方式使事情起作用:

  1. 关闭您的Django开发服务器
  2. 转到http://127.0.0.1:8000-它会给您一个404
  3. 打开 Chrome的开发工具
  4. 点击并按住“ 重新加载”按钮
  5. 选择:“ 空缓存和硬加载
  6. 重新启动Django开发服务器
  7. 再次点击http://127.0.0.1:8000

答案 2 :(得分:0)

如果您是团队的成员,则可以使用变量来设置开发环境。例如DJANGO_DEV=development

之后,您可以检查当前环境是否为DEV env并设置特定值。

在此answer

上了解有关此方法的更多信息