【问题标题】:Django says my development server doesn't support HTTPS, even though I've disabled itDjango 说我的开发服务器不支持 HTTPS,即使我已经禁用它
【发布时间】:2018-06-22 20:38:03
【问题描述】:

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

【问题讨论】:

    标签: django


    【解决方案1】:

    您通过设置 SECURE_SSL_REDIRECT = True 将 django 站点配置为强制执行 https - 这对于生产设置来说是一个非常好的主意。

    如果您将 SECURE_SSL_REDIRECT 设置设置为 True,SecurityMiddleware 将永久 (HTTP 301) 将所有 HTTP 连接重定向到 HTTPS。

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

    阅读本文以了解如何处理它:Django: How to manage development and production settings?

    注意

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

    【讨论】:

    • 好的,去看看。既然伤害已经造成,有什么办法可以挽回吗?我显然不希望在我的开发环境中出现这个问题。理想情况下,我想让中间件“忘记”我更改的设置,然后按照您链接到的答案进行操作。
    • 您没有造成任何损害 - 您只是更改了配置。 在本地开发时,将其改回SECURE_SSL_REDIRECT = False
    • 我知道,但问题并没有消失,这让我感到困惑。我更改为SECURE_SSL_REDIRECT = False,但我收到与我在问题中指定的相同消息的相同错误。嗯,不完全相同的消息。请参阅我的编辑以获取确切的消息。
    • 您是否禁用/清除了浏览器缓存?通常浏览器在收到来自服务器的 301 很长时间后不再询问,而是重定向到任何目标(因为服务器告诉他)。作为快速测试,您可以使用其他浏览器。
    【解决方案2】:

    浏览器在处理SECURE_SSL_REDIRECT=True时缓存了来自上一个请求的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

    【讨论】:

      【解决方案3】:

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

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

      answer 上阅读有关此方法的更多信息

      【讨论】:

        【解决方案4】:

        您可以尝试编辑您的编辑配置并在不同的端口上运行服务器。在 pycharm 中我更改了 run -> edit_configurations -> host = 127.0.0.1, Port = 8001.

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

        【讨论】:

          猜你喜欢
          • 2013-02-28
          • 1970-01-01
          • 2019-12-27
          • 1970-01-01
          • 2020-03-04
          • 2017-09-08
          • 2018-01-11
          • 1970-01-01
          • 2020-07-10
          相关资源
          最近更新 更多