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



我在Django上开发了自己的网站一段时间,今天我开始学习如何部署它。我把它添加到我的 settings.py:

SECURE_SSL_REDIRECT = True,

这导致开发服务器停止正常工作,并显示以下错误消息:

[13/Jan/2018 16:56:49] code 400, message Bad request syntax ('x16x03x01x00Àx01x00x00¼x03x03ßàx84¼+Jnßþn-ñx88ý©vAþKx83¤²êTx86x0b.x8emx0b:âx00x00x1cÚÚÀ+À/À,À0̨̩Àx13Àx14x00x9cx00x9dx00/x005x00')
[13/Jan/2018 16:56:49] code 400, message Bad HTTP/0.9 request type ('x16x03x01x00Àx01x00x00¼x03x03x87')
[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Àx14x00x9cx00x9dx00/x005x00')
[13/Jan/2018 16:56:49] You're accessing the development server over HTTPS, but it only supports HTTP.

为什么我的服务器停止正常工作?

请注意,当我将设置更改回SECURE_SSL_REDIRECT = False时,问题并没有消失。

你配置了你的 django 站点,通过设置SECURE_SSL_REDIRECT = True来强制执行 https - 这对于生产设置来说是个好主意。

如果将SECURE_SSL_REDIRECT设置设置为 True,安全中间件将永久 (HTTP 301( 将所有 HTTP 连接重定向到 HTTPS。

出于这个原因(以及其他原因(,您通常有单独的开发和生产设置。有一些事情几乎总是不同的。

阅读本文以了解一些如何处理它的人:Django:如何管理开发和生产设置?

注意

如果您的浏览器曾经从您的网站收到过 301 - 将设置更改回来可能不会产生直接影响,因为浏览器缓存了目标 URL,并且不会在 HTTP 上发送请求。在这种情况下,您需要清除或禁用浏览器缓存。

浏览器在使用SECURE_SSL_REDIRECT=True时缓存了http -> https 重定向。

将其关闭服务器端不会影响缓存的重定向。

您可以有选择地清除开发服务器的 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

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

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

在此答案中阅读有关此方法的更多信息

您可以尝试编辑编辑配置并在其他端口上运行服务器。在 pycharm 中,我更改了 run -> edit_configurations -> 主机 = 127.0.0.1,端口 = 8001。

然后我重新运行了 Python 解释器,它在没有 https 的新浏览器中再次启动。您可能需要先更改设置选项,以便在local_settings或设置中选择 SECURE_SSL_REDIRECT = False。

最新更新