错误“您正在通过HTTPS访问开发服务器,但它仅支持HTTP”

时间:2016-02-21 13:04:37

标签: django http ssl https

SSL connection

当我尝试编写像http:// ....这样的服务器链接时,它会重定向到https://并在终端中:

message Bad HTTP/0.9 request type ('\x16\x03\x01\x00\x8b\x01\x00\x00\x87\x03\x01Ð\x118¿JÄ\x19[Òç\x01<O')
You're accessing the development server over HTTPS, but it only supports HTTP.

8 个答案:

答案 0 :(得分:20)

我认为你应该创建不同的settings.py(base_settings.py,local_settings.py,production_settings.py)。在您的settings.py中执行以下操作:

import socket
if socket.gethostname()=="Raouf-PC":
    from local_settings import *

将'Raouf-PC'更改为您PC的主机名。

P:S:我正在使用Windows 10。

执行此操作后,将以下数据放入您的production_settings.py并保存。然后清除浏览器缓存并访问开发服务器中的站点。

SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_SSL_REDIRECT = True

如果上述内容不符合您的需求,请在您的local_settings.py中粘贴以下数据,保存并清除浏览器缓存并访问您的网站。

SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SECURE = False
SECURE_SSL_REDIRECT = False

注意:在production_setttings.py和local_settings.py的开头put:

from base_settings.py import *

您的基本设置应包含将在本地服务器和生产服务器上使用的“设置”,因此您不会每次都重复这些设置。

P:S如果我的答案被接受,我会把它献给那些以某种方式帮助过我的SO人。这是我第一次回答问题。我希望将来做得更多。 :)

答案 1 :(得分:13)

您可能将SECURE_SSL_REDIRECT设置为True

运行开发服务器时,此设置应为False

答案 2 :(得分:3)

代替使用命令

python manage.py runserver

我用过

python manage.py runserver 8080

只需更改端口号,它就对我有用。

答案 3 :(得分:1)

CORS_REPLACE_HTTPS_REFERER      = False
HOST_SCHEME                     = "http://"
SECURE_PROXY_SSL_HEADER         = None
SECURE_SSL_REDIRECT             = False
SESSION_COOKIE_SECURE           = False
CSRF_COOKIE_SECURE              = False
SECURE_HSTS_SECONDS             = None
SECURE_HSTS_INCLUDE_SUBDOMAINS  = False
SECURE_FRAME_DENY               = False

1。将此设置放在设置的末尾。py
2.清除浏览器缓存,然后运行项目。

答案 4 :(得分:1)

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

例如,在将用于开发的计算机上,将其添加到〜/ .bashrc文件中:

export DJANGO_DEV=true

或者您可以使用django-environ

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

import os

# if os.environ.get('DJANGO_ENV') is not None:
    SECURE_SSL_REDIRECT = False
    SESSION_COOKIE_SECURE = False
    CSRF_COOKIE_SECURE = False
else:
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    SECURE_SSL_REDIRECT = True
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True

如果有多个设置,则可以按照@yoyo的答案中的说明去定义特定的文件。

答案 5 :(得分:1)

只需将.env文件中的路径更改为http:// localhost:8000 /

对我有用。我正在将Django后端和React前端与Django rest框架一起使用。

答案 6 :(得分:0)

我还建议您确保不要尝试通过某些端口访问页面。例如,通过在带有某些端口的PyCharm上运行Django服务器。

答案 7 :(得分:0)

它清楚地表明您正在通过 https 访问开发服务器,但它只支持 http。

通常我们像 http://127.0.0.1:8000 一样访问开发服务器,但在您的情况下它是 https://127.0.0.1:8000,正如前面提到的,我们无法通过 https 访问开发服务器。

我遇到了同样的问题,但就我而言,当我将电子邮件验证发送到 gmail 帐户时,我创建了域 https 而不是 http,所以我更正了域,然后它就可以正常工作了。