Django REST Framework开发服务器HTTPS访问报错求助
Django REST Framework 安全配置后出现的HTTPS及连接拒绝问题
问题描述
为提升Django REST Framework站点安全性,参照视频和文章配置安全参数后出现报错。目前丢失初始报错日志,但当前报错疑似与之前一致。已尝试还原配置、使用ChatGPT排查方案,均未解决问题:
- 访问API站点时,终端提示“尝试通过HTTPS访问仅支持HTTP的开发服务器”
- 使用fetch.py请求数据时,出现连接被拒绝错误
相关配置与报错信息
settings.py 配置
from pathlib import Path import os BASE_DIR = Path(__file__).resolve().parent.parent SECRET_KEY = 'later' DEBUG = False ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ 'api', # api是我的应用名称 'rest_framework', 'rest_framework.authtoken', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.contenttypes', ] MIDDLEWARE = [ # 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'pythonRestApi.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'pythonRestApi.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } AUTH_PASSWORD_VALIDATORS = [ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'}, {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'}, {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, ] LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_TZ = True STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # 已还原的安全配置,原本均设为True SECURE_BROWSER_XSS_FILTER = False SECURE_CONTENT_TYPE_NOSNIFF = False SECURE_SSL_REDIRECT = False SECURE_HSTS_SECONDS = 0 # 原本设为86400 SECURE_HSTS_PRELOAD = False SECURE_HSTS_INCLUDE_SUBDOMAINS = False SESSION_COOKIE_SECURE = False CSRF_COOKIE_SECURE = False
终端报错信息
code 400, message Bad request version ('ZZ\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x01\x93ÊÊ\x00\x00\x00') // 每次内容都会变化 你正在通过HTTPS访问仅支持HTTP的开发服务器。 code 400, message Bad HTTP/0.9 request type ('\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x18Ø&\x81é5Â') 你正在通过HTTPS访问仅支持HTTP的开发服务器。
fetch.py 报错信息
发生错误:HTTPConnectionPool(host='192.168.29.72', port=80): 对URL: /auth/ 的重试次数已达上限(由NewConnectionError导致:'<urllib3.connection.HTTPConnection object at 0x000002D5090B52B0>: 无法建立新连接:[WinError 10061] 由于目标计算机积极拒绝,无法连接。')
解决方案
针对HTTPS访问HTTP服务器的报错
- 确认访问协议与端口:Django自带的开发服务器
runserver默认仅支持HTTP,访问时需使用http://开头的地址,比如http://localhost:8000或http://192.168.29.72:8000(默认端口为8000) - 清除浏览器缓存:之前设置的
SECURE_SSL_REDIRECT可能被浏览器缓存,使用隐身模式访问或清除缓存后重试 - 排查代理工具干扰:检查是否有本地代理工具(如Charles、Fiddler)强制将HTTP请求转为HTTPS,暂时关闭这类工具测试
针对fetch.py连接被拒绝的报错
- 指定服务器绑定地址与端口:启动开发服务器时明确绑定目标IP和端口,比如执行:
若要使用80端口,需以管理员权限运行命令,但开发环境不推荐使用80端口python manage.py runserver 192.168.29.72:8000 - 修正fetch.py请求地址:将请求地址改为服务器实际运行的地址,比如
http://192.168.29.72:8000/auth/ - 检查防火墙与端口:确认本地防火墙未拦截8000端口(或你指定的端口)
- 临时开启DEBUG模式:开发环境下暂时将
DEBUG设为True,排查是否因DEBUG关闭导致的额外限制
内容的提问来源于stack exchange,提问作者JALAN
相关产品推荐
相关产品推荐

